public function process(LooPHP_EventLoop $event_loop, $timeout) { $read_resource_array = $this->_socket_array; $write_resource_array = NULL; $exception_resource_array = $this->_socket_array; $results = socket_select($read_resource_array, $write_resource_array, $exception_resource_array, is_null($timeout) ? NULL : floor($timeout), is_null($timeout) ? NULL : fmod($timeout, 1) * 1000000); if ($results === FALSE) { throw new Exception("stream_select failed"); } else { if ($results > 0) { foreach ($read_resource_array as $read_resource) { if ($this->_listen_socket === $read_resource) { $client_resource = @socket_accept($this->_listen_socket); $this->_socket_array[(int) $client_resource] = $client_resource; } else { //send http responce in 5 second (just to demo events) $event_loop->addEvent(function () use($read_resource) { $send_data = "HTTP/1.0 200 OK\n" . "Content-Type: text/html\n" . "Server: LooPHP" . "\r\n\r\n" . "<body>Hello World</body>"; socket_write($read_resource, $send_data); socket_close($read_resource); }, 5); unset($this->_socket_array[(int) $read_resource]); } } foreach ($exception_resource_array as $exception_resource) { print "Socket had exception\n"; unset($this->_socket_array[(int) $exception_resource]); } } } return TRUE; }
<?php require dirname(dirname(__FILE__)) . "/LooPHP/Autoload.php"; LooPHP_Autoload::register(); $loop = new LooPHP_EventLoop(); for ($i = 0; $i < 100000; $i++) { $loop->addEvent(function () { }); } $loop->run();
<?php require dirname(dirname(__FILE__)) . "/LooPHP/Autoload.php"; LooPHP_Autoload::register(); $loop = new LooPHP_EventLoop(); $target_time = microtime(TRUE) + 0; for ($i = 0; $i < 100000; $i++) { $loop->addEvent(function () { }, $target_time - microtime(TRUE)); } $loop->run();
<?php require dirname(dirname(__FILE__)) . "/LooPHP/Autoload.php"; LooPHP_Autoload::register(); $loop = new LooPHP_EventLoop(); $add_event = function ($loop) use(&$add_event) { static $i = 0; if (++$i >= 100000) { return; } $loop->addEvent($add_event); }; $add_event($loop); $loop->run();
<?php require dirname(dirname(__FILE__)) . "/LooPHP/Autoload.php"; LooPHP_Autoloader::register(); $loop = new LooPHP_EventLoop(); $loop->addEvent(function () { print "Event 1\n"; }, 1); $loop->addEvent(function ($loop) { print "Event 3\n"; print "Adding Event 6\n"; $loop->addEvent(function () { print "Event 6\n"; }, 3); }, 3); $event_4 = $loop->addEvent(function () { print "Event 4\n"; }, 4); $loop->addEvent(function () use($event_4) { print "Event 2\n"; print "Cancelling Event 4\n"; $event_4->cancel(); }, 2); $loop->addEvent(function () { print "Event 5\n"; }, 5); print "Starting Run Loop:\n"; $loop->run();
<?php require dirname(dirname(__FILE__)) . "/LooPHP/Autoload.php"; LooPHP_Autoloader::register(); $multi_event_source = new LooPHP_EventSourceMulti(array(array(function () { static $i = 0; usleep(100000); return (string) ++$i . "\n"; }, function ($input, $loophp) { print $input; }), array(function () { static $i = 0; usleep(100000); return (string) ++$i . "\n"; }, function ($input, $loophp) { print $input; }))); $loop = new LooPHP_EventLoop($multi_event_source); $loop->run();