【发布时间】:2013-07-09 03:58:33
【问题描述】:
我正在使用 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();
【问题讨论】:
-
但是如何向特定用户发送消息?如何在连接到一个 WebSocket 服务器的 2 个客户端的示例中实现这一点,每个客户端都有自己的连接对象:$ConnSender,$ConnReceiver?请向我澄清一下,我在 SO.thanks 的棘轮标签上找不到任何答案
-
绝对没有必要,但是建议您从客户端发送到服务器的每个数据都需要在 http 请求中使用 ajax 完成,然后您应该使用 ZMQ 告诉 webSocketServer 将相同的数据发送到另一个客户端使用 webSockets,因为如果您在 websocket 服务器中处理数据,这是一个安全问题。即使您使用链接中的线程,您也会通过线程中的重新应用程序代码
-
正是我的解决方案。
-
非常感谢先生分享您的经验,特别是PHP编程这部分确实缺乏简单明了的文档(考虑到新手)。
-
我已经发布了回复希望对您有所帮助。
标签: php session symfony websocket ratchet