public function start($count = 1) { $loop = Factory::create(); $server = stream_socket_server($this->config->getConnectionString()); if ($server === false) { throw new \RuntimeException("create socket server failed"); } $blocking = stream_set_blocking($server, 0); if ($blocking === false) { throw new \RuntimeException("stream_set_blocking failed"); } $loop->addReadStream($server, function ($server) use($loop) { $dispatcher = $this->config->getDispatcher(); if ($dispatcher !== null && !$dispatcher->acquire($server, $loop)) { return; } $conn = stream_socket_accept($server); $dispatcher->release($server, $loop); $loop->addReadStream($conn, function ($conn) use($loop) { call_user_func(array($this->handler, 'handle'), $conn, $loop); }); }); $master = new Master($loop, $count); $master->start(); }
public function start($count = 1) { $loop = Factory::create(); $server = stream_socket_server("tcp://{$this->host}:{$this->port}"); if ($server === false) { throw new \RuntimeException("create socket server failed"); } $blocking = stream_set_blocking($server, 0); if ($blocking === false) { throw new \RuntimeException("stream_set_blocking failed"); } $loop->addReadStream($server, function ($server) use($loop) { if ($this->dispatcher !== null && !$this->dispatcher->enableAccept($loop)) { return; } $conn = stream_socket_accept($server); $loop->addWriteStream($conn, function ($conn) use($loop) { call_user_func(array($this->handler, 'handle'), $conn, $loop); }); }); $master = new Master($loop, $count); $master->start(); }