コード例 #1
0
ファイル: ipc_queues.php プロジェクト: rebuy-de/nanoserv
        $processed = 0;
        while (true) {
            if ($data = self::$queue->Dequeue($processed)) {
                // Do the work
                self::Do_Work($data);
                $processed = 1;
            } else {
                // Or sleep if there's nothing to do
                usleep(50000);
                $processed = 0;
            }
        }
    }
}
// The shared object must be created before Nanoserv::Fork()ing
My_Worker::$queue = Nanoserv::New_Shared_Object(new My_Queue());
pecho("master process launched, forking " . NUM_CHILDREN . " worker(s) ...");
$pids = array();
for ($a = 0; $a < NUM_CHILDREN; $a++) {
    if (($pid = Nanoserv::Fork()) === 0) {
        // Run the child process
        My_Worker::Run();
    } else {
        $pids[] = $pid;
    }
}
pecho("worker(s) ready (" . implode(",", $pids) . ")");
$t = time();
$b = 0;
$start_mt = microtime(true);
while (My_Worker::$queue->num_done < WORK_LOAD) {
コード例 #2
0
ファイル: shared_obj.php プロジェクト: rebuy-de/nanoserv
#!/opt/local/bin/php
<?php 
require "nanoserv/handlers/HTTP/Server.php";
class dumb_httpd extends \Nanoserv\HTTP\Server
{
    private $shared_obj;
    public function __construct($o)
    {
        $this->shared_obj = $o;
    }
    public function on_Request($url)
    {
        $val = $this->shared_obj->foo();
        return "[" . posix_getpid() . "] Content of shared value : <b>{$val}</b>";
    }
}
class foo_inc
{
    public $value = 0;
    public function foo()
    {
        return ++$this->value;
    }
}
$o = \Nanoserv\Core::New_Shared_Object(new foo_inc());
$l = \Nanoserv\Core::New_Listener("tcp://0.0.0.0:800", "dumb_httpd", $o);
$l->Set_Forking();
$l->Activate();
$o->value = 100;
\Nanoserv\Core::Run();
コード例 #3
0
#!/opt/local/bin/php
<?php 
require "nanoserv/handlers/HTTP/XML_RPC/Persistent_Server.php";
class dumb_xmlrpc
{
    public $bar;
    public function getFoo($bar)
    {
        return array("foo" => "foo{$bar}", "bar" => $this->bar++);
    }
}
$o = new dumb_xmlrpc();
$l = \Nanoserv\Core::New_Listener("tcp://0.0.0.0:800", '\\Nanoserv\\HTTP\\XML_RPC\\Persistent_Server', \Nanoserv\Core::New_Shared_Object($o));
$l->Set_Forking();
$l->Activate();
$o->bar = 100;
\Nanoserv\Core::Run();
コード例 #4
0
    public $value = 0;
    public function set($v)
    {
        if (!($v % 1000)) {
            pecho("setting value to {$v}");
        }
        $this->value = $v;
    }
    public function done($t)
    {
        pecho("10000 IPC ops in " . sprintf("%.2f", $t) . " sec.");
        exit;
    }
}
$o = new foo();
$so = \Nanoserv\Core::New_Shared_Object($o);
pecho("master process launched, forking");
if (\Nanoserv\Core::Fork() > 0) {
    \Nanoserv\Core::Run();
}
pecho("child process launched");
$t = microtime(true);
for ($a = 1; $a <= 5000; $a++) {
    $so->set($a);
    if (($test = $so->value) !== $a) {
        pecho("ERROR: {$test} != {$a}");
    }
    if (!($a % 1000)) {
        pecho('$so->value = ' . $test);
    }
}