Symfony2 WebSocketBundle - ZMQ Push无法正常工作

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().

Har*_*ood 1

您引用的文档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)