Roy*_*yar 12 php zeromq websocket symfony ratchet
我正在使用Symfony2来构建一个简单的聊天应用程序.我决定使用GeniusesOfSymfony/WebSocketBundle作为我的WebSocket,由Ratchet提供支持:
https://github.com/GeniusesOfSymfony/WebSocketBundle
我设法使用PubSub进行聊天,但我想使用推送集成:我希望客户端通过AJAX将消息发送到我的Symfony2控制器,而控制器又将消息推送到WebSocket的所有客户端.
我按照这个文档页面:
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");
Run Code Online (Sandbox Code Playgroud)
这是我的ChatTopic类中的onPush方法:
class ChatTopic implements TopicInterface, PushableTopicInterface {
public function onPush(Topic $topic, WampRequest $request, $data, $provider) {
$topic->broadcast($data);
}
}
Run Code Online (Sandbox Code Playgroud)
永远不会调用onPush方法.此外,推动事件永远不会被解雇.代码中似乎没有例外.
使用WebSocket Pusher,我甚至无法使服务运行.在cmd中没有像ZMQ那样的通知,并且使用netstat命令我无法检测到它正在侦听端口1337.当我尝试推送它时,我得到异常:
无法打开插座.原因:无法建立连接,因为目标计算机主动拒绝它
可能是因为没有服务侦听端口1337.
PS - 我在Windows 10上并使用WAMP服务器.我已成功在WAMP上安装了ZMQ扩展,如下所示phpinfo().
您引用的文档Pusher.md不完整。您还必须将主题注册为服务并将其标记为配置的可用主题。
最好遵循TopicSetup.md。然而,这是缺少的亮点。
新的 ChatTopic 类可以在 Symfony 服务中注册AppBundle/Resources/config/services.yml并标记如下:
services:
app.chat_topic_service:
class: App\AppBundle\Topic\ChatTopic
tags:
- { name: gos_web_socket.topic }
Run Code Online (Sandbox Code Playgroud)