示例#1
0
 public function init($socket, Closure $closure)
 {
     $server = new ServerSocket($socket);
     $server->connectAndWait();
     while (true) {
         foreach ($server->select() as $node) {
             $clouse->__invoke($server);
         }
     }
 }
示例#2
0
 /**
  * Construct the DNS server.
  *
  * @param   \Hoa\Socket\Server  $server    Server.
  * @return  void
  */
 public function __construct(Socket\Server $server)
 {
     if ('udp' != $server->getSocket()->getTransport()) {
         throw new Exception('Server must listen on UDP transport; given %s.', 0, strtoupper($server->getSocket()->getTransport()));
     }
     set_time_limit(0);
     $this->_server = $server;
     $this->_on = new Core\Event\Listener($this, ['query']);
     return;
 }
示例#3
0
文件: Shared.php 项目: haskel/Worker
 /**
  * Run the shared worker.
  * It creates a zombie with \Hoa\Zombie.
  *
  * @return  void
  * @throws  \Hoa\Worker\Backend\Exception
  */
 public function run()
 {
     $server = new Socket\Server($this->_socket);
     $server->connectAndWait();
     Zombie::fork();
     $_eom = pack('C', 0);
     while (true) {
         foreach ($server->select() as $node) {
             $request = unpack('nr', $server->read(2));
             $length = unpack('Nl', $server->read(4));
             $message = unserialize($server->read($length['l']));
             $eom = unpack('Ce', $server->read(1));
             if ($eom['e'] != $_eom) {
                 $server->disconnect();
                 continue;
             }
             switch ($request['r']) {
                 case static::TYPE_MESSAGE:
                     $this->getListener()->fire('message', new Event\Bucket(['message' => $message]));
                     ++$this->_messages;
                     $this->_lastMessage = time();
                     break;
                 case static::TYPE_STOP:
                     if ($this->_password === $message) {
                         $server->disconnect();
                         break 3;
                     }
                     break;
                 case static::TYPE_INFORMATION:
                     $message = ['id' => $this->_wid, 'socket' => $this->_socket, 'start' => $this->_startTime, 'pid' => getmypid(), 'memory' => memory_get_usage(true), 'memory_allocated' => memory_get_usage(), 'memory_peak' => memory_get_peak_usage(true), 'memory_allocated_peak' => memory_get_usage(), 'messages' => $this->_messages, 'last_message' => $this->_lastMessage, 'filename' => $_SERVER['SCRIPT_FILENAME']];
                     $server->writeAll(static::pack(static::TYPE_MESSAGE, $message));
                     break;
             }
             $server->disconnect();
         }
     }
     $server->disconnect();
     if (null !== $this->_wid) {
         Worker\Run::unregister($this->_wid);
     }
     return;
 }
示例#4
0
文件: Server.php 项目: shulard/Socket
 public function case_constructor_with_flag_and_udp()
 {
     $this->given($socket = 'udp://hoa-project.net:80', $timeout = 42, $flag = SUT::BIND)->when($result = new SUT($socket, $timeout, $flag))->then->let($_socket = $result->getSocket())->string($_socket->getTransport())->isEqualTo('udp')->integer($result->getFlag())->isEqualTo($flag);
 }