我正在使用Symfony2构建一个简单的聊天应用程序。 我决定使用GeniusesOfSymfony/WebSocketBundle作为我的WebSocket,由Ratchet提供支持:
https://github.com/GeniusesOfSymfony/WebSocketBundle
我设法使用PubSub进行聊天工作,但我想使用推送集成:我希望客户端通过AJAX将消息发送到我的Symfony2控制器,而控制器又将消息推送到所有客户端网页套接字。
我遵循了这个文档页面:
https://github.com/GeniusesOfSymfony/WebSocketBundle/blob/master/Resources/docs/Pusher.md
我尝试过使用ZMQ和Websocket Pusher。
使用ZMQ,当我运行websocket时,我收到cmd通知:
ZMQ传输监听127.0.0.1:5555
然而,推送消息并不起作用:
$pusher = $this->container->get("gos_web_socket.zmq.pusher");
//push(data, route_name, route_arguments)
$pusher->push(["type" => "newMessage", "text" => $request->request->get("msg")], "chat_topic");
这是我的ChatTopic类中的onPush方法:
class ChatTopic implements TopicInterface, PushableTopicInterface {
public function onPush(Topic $topic, WampRequest $request, $data, $provider) {
$topic->broadcast($data);
}
}
永远不会调用onPush方法。此外,推动事件永远不会被解雇。代码中似乎没有异常。
使用WebSocket Pusher,我甚至无法让服务运行。在cmd中没有像ZMQ那样的通知,并且使用netstat
命令我无法检测到它正在侦听端口1337.当我尝试推送它时,我得到异常:< / p>
无法打开套接字。原因:因为没有联系 目标机器积极拒绝它
可能是因为1337端口没有服务侦听。
P.S。 - 我在Windows 10上并使用WAMP服务器。我已在WAMP上成功安装了ZMQ扩展,如phpinfo()
所示。
答案 0 :(得分:0)
您引用的文档pusher.md并不完整。您还必须将主题注册为服务,并将其标记为配置的可用主题。
最好遵循TopicSetup.md。但是,这是缺少的亮点。
可以在Symfony服务AppBundle/Resources/config/services.yml
中注册新的ChatTopic类,并像这样标记:
services:
app.chat_topic_service:
class: App\AppBundle\Topic\ChatTopic
tags:
- { name: gos_web_socket.topic }