Symfony2 WebSocketBundle - ZMQ Push not work

2022-08-30 21:22:27

我正在使用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");

这是我的ChatTopic类中的onPush方法:

class ChatTopic implements TopicInterface, PushableTopicInterface {

    public function onPush(Topic $topic, WampRequest $request, $data, $provider) {
        $topic->broadcast($data);
    }
}

从不调用 onPush 方法。此外,推送器事件永远不会被触发。代码中似乎没有异常。

使用WebSocket Pusher,我甚至无法运行该服务。cmd中没有像ZMQ那样的通知,并且使用命令我无法检测到它正在侦听端口1337。当我尝试推送它时,我得到异常:netstat

无法打开套接字。原因:无法建立连接,因为目标计算机主动拒绝连接

可能是因为端口 1337 上没有服务侦听。

附言 - 我在Windows 10上使用WAMP服务器。我已成功在 WAMP 上安装了 ZMQ 扩展,如 .phpinfo()


答案 1

您引用的文档 pusher.md 不完整。您还必须将主题注册为服务,并将其标记为配置的可用主题。

最好遵循 TopicSetup.md。但是,这是缺少的亮点。

新的ChatTopic类可以在Symfony Services中注册,并按如下方式标记:AppBundle/Resources/config/services.yml

services:
    app.chat_topic_service:
        class: App\AppBundle\Topic\ChatTopic
        tags:
            - { name: gos_web_socket.topic }

答案 2

推荐