Permalink
Browse files

Initial commit

  • Loading branch information...
oyagev committed Feb 9, 2012
0 parents commit 99afc12aea1e7f352f2412bdbebf7d2da83bc0cc
@@ -0,0 +1,3 @@
+.project
+.settings
+.buildpath
0 README
No changes.
@@ -0,0 +1,5 @@
+<?php
+class User{
+
+ public $fname,$lname,$username,$password;
+}
@@ -0,0 +1,5 @@
+<?php
+var_dump($_GET,$_POST,$_SERVER);
+$u = new User();
+var_dump($u);
+echo memory_get_usage(true);
@@ -0,0 +1,33 @@
+<?php
+namespace PHAS;
+
+use PHAS\Lib\Server;
+
+use PHAS\Lib\ServerConfig;
+
+
+
+define('PHAS_ABSPATH',__DIR__.'/');
+define('PHAS_CONFIG_PATH',PHAS_ABSPATH.'config/');
+define('PHAS_LIB_PATH',PHAS_ABSPATH.'lib/');
+define('PHAS_VENDOR_PATH',PHAS_ABSPATH.'vendor/');
+
+function autoload($name){
+ $file = false;
+ if (strpos($name, 'PHAS\\Lib\\')===0){
+ $file = PHAS_LIB_PATH . str_replace('PHAS\\Lib\\', '', $name).'.php';
+ }elseif(strpos($name, 'PHAS\\Vendor\\')===0){
+ $file = PHAS_VENDOR_PATH . str_replace('PHAS\\Vendor\\', '', $name).'.php';
+ }
+
+ if ($file && file_exists($file)){
+ require_once $file;
+ }
+}
+spl_autoload_register('PHAS\autoload');
+
+require_once(PHAS_CONFIG_PATH.'server.php');
+$config = new ServerConfig($serverConfig);
+
+
+
@@ -0,0 +1,9 @@
+<?php
+$serverConfig = array(
+ 'server.gearman.host' => '127.0.0.1',
+
+ 'app.name' => 'App Name',
+ 'app.script.bootstrap' => PHAS_ABSPATH.'../example-app/boot.php',
+ 'app.script.loop' => PHAS_ABSPATH.'../example-app/loop.php',
+
+);
@@ -0,0 +1,8 @@
+<?php
+
+use PHAS\Lib\Entrance;
+require_once 'bootstrap.php';
+
+$entrance = new Entrance($config);
+echo $entrance->go();
+
@@ -0,0 +1,27 @@
+<?php
+
+namespace PHAS\Lib;
+
+class Entrance{
+ protected $config,$client;
+ function __construct(ServerConfig $config){
+ $this->config = $config;
+ $this->client= new \GearmanClient();
+
+ # Add default server (localhost).
+ $this->client->addServer($config->get('server.gearman.host'));
+
+ }
+
+ function go(){
+ $params = json_encode(array(
+ 'post' => $_POST,
+ 'get' => $_GET,
+ 'server' => $_SERVER
+ ));
+
+ return $result = $this->client->do('serve',$params);
+
+ }
+
+}
@@ -0,0 +1,30 @@
+<?php
+namespace PHAS\Lib;
+
+use PHAS\Vendor\Thread;
+
+class Server {
+ protected $config;
+ function __construct(ServerConfig $config){
+ $this->config = $config;
+ $this->startNewWorker();
+ }
+
+ function startNewWorker(){
+ if( ! Thread::available() ) {
+ die( 'Threads not supported' );
+ }
+ $t = new Thread( '\PHAS\Lib\run' );
+ $t->start($this->config);
+
+
+ }
+
+ static function run($config){
+ $worker = new Worker($config);
+ }
+}
+
+function run($config){
+ $worker = new Worker($config);
+}
@@ -0,0 +1,25 @@
+<?php
+
+namespace PHAS\Lib;
+
+class ServerConfig {
+ public $opts=array();
+
+
+ function __construct($opts){
+ $this->opts = array_merge($this->opts,$opts);
+ }
+
+ function get($key){
+ if (isset($this->opts[$key])){
+ return $this->opts[$key];
+ }
+ throw new Exception('Config not found: '.$key);
+ }
+ function set($key,$value){
+ $this->opts[$key] = $value;
+ return $this;
+ }
+
+
+}
@@ -0,0 +1,52 @@
+<?php
+namespace PHAS\Lib;
+
+class Worker{
+ protected $config,$worker;
+ function __construct(ServerConfig $config){
+ $this->config = $config;
+ $this->worker = new \GearmanWorker();
+ $this->worker->addServer($config->get('server.gearman.host'));
+ $this->worker->addFunction('serve',array($this,'workApp'));
+ $this->bootApp();
+ }
+
+
+ function bootApp(){
+ $app = $this->config->get('app.script.bootstrap');
+ if (file_exists($app)) require_once $app;
+
+ while (1)
+ {
+
+
+ $ret= $this->worker->work();
+ if ($this->worker->returnCode() != GEARMAN_SUCCESS)
+ break;
+ }
+ }
+
+ function workApp($job){
+
+
+
+ $params = json_decode($job->workload());
+ $_POST = (array)$params->post;
+ $_GET = (array)$params->get;
+ $_SERVER = (array)$params->server;
+ $_REQUEST = array_merge($_GET,$_POST);
+ //$_SERVER['REQUEST_URI'] = '/oht/';
+
+ $app = $this->config->get('app.script.loop');
+ ob_start();
+
+
+ include $app;
+
+ return ob_get_clean();
+ }
+
+
+
+
+}
@@ -0,0 +1,43 @@
+<?php
+# Create our worker object.
+$worker= new GearmanWorker();
+
+# Add default server (localhost).
+$worker->addServer();
+
+# Register function "reverse" with the server.
+$worker->addFunction("reverse", "reverse_fn");
+$worker->addFunction("fire", "fire_in_the_hole");
+
+while (1)
+{
+ print "Waiting for job...\n";
+
+ $ret= $worker->work();
+ if ($worker->returnCode() != GEARMAN_SUCCESS)
+ break;
+}
+
+# A much simple reverse function
+function reverse_fn($job)
+{
+ $workload= $job->workload();
+ echo "Received job: " . $job->handle() . "\n";
+ echo "Workload: $workload\n";
+ $result= strrev($workload);
+ echo "Result: $result\n";
+ return $result;
+}
+
+
+function fire_in_the_hole($job){
+ $params = json_decode($job->workload());
+ $_POST = $params->post;
+ $_GET = $params->get;
+ $_SERVER = $params->server;
+
+ $app = __DIR__.'/../example-app/hello.php';
+ ob_start();
+ include $app;
+ return ob_get_clean();
+}
@@ -0,0 +1,6 @@
+<?php
+
+use PHAS\Lib\Server;
+require_once 'bootstrap.php';
+
+new Server($config);
Oops, something went wrong.

0 comments on commit 99afc12

Please sign in to comment.