Symfony2 WebSocketBundle - ZMQ Push无法正常工作

时间:2016-11-01 23:15:31

标签: php symfony websocket zeromq ratchet

我正在使用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()所示。

1 个答案:

答案 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 }