我在使用Ratchet库的实时Symfony应用程序中工作,在这个应用程序中我需要将一些数据发送给特定用户,因此逻辑解决方案是使用SessionProvider将Symfony2 Session对象附加到每个传入的Connection对象.正如文档所述,我已经设置了一个非本地会话处理程序来存储我的会话,即通过PDO存储在数据库中.并且目前工作正常,但我需要获取特定用户的Connection对象以向他发送一些数据,所以在其他方面我需要找到引用此用户的连接对象,我找不到办法它?她是我的服务器代码:
$app=new AggregateApplication();
$loop = \React\EventLoop\Factory::create();
$context = new \React\ZMQ\Context($loop);
$pull = $context->getSocket(\ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5555');
$pull->on('message', array($app, 'onNotification'));
$webSock = new \React\Socket\Server($loop);
$webSock->listen(8080, '127.0.0.1');
$handler = $this->getContainer()->get('session.handler');
$server=new \Ratchet\Wamp\WampServer($app);
$server = new SessionProvider($server, $handler);
$webServer = new \Ratchet\Server\IoServer(new \Ratchet\WebSocket\WsServer($server),$webSock);
$loop->run();
Run Code Online (Sandbox Code Playgroud) 我正在使用棘轮php.我是这样开始的:
$loop = \React\EventLoop\Factory::create();
$webSock = new \React\Socket\Server($loop);
$webSock->listen($this->port, $this->host);
$webServer = new \Ratchet\Server\IoServer(
new \Ratchet\Http\HttpServer(
new \Ratchet\WebSocket\WsServer(
new PusherServer()
)
),
$webSock
);
return $loop;
Run Code Online (Sandbox Code Playgroud)
现在,在我onMessage()
的Pusherserver
班级(实现MessageComponentInterface
)中,我想执行一个长期的阻塞任务.这将是一个HTTP请求,可能需要十秒钟才能完成.
如何在onMessage()
执行上一个HTTP请求时自由处理其他请求?我不能使用pthreads,因为我无权更改我已经给出的php版本(这是线程安全的).