代码之家  ›  专栏  ›  技术社区  ›  murtho

订阅时Websocket断开连接

  •  0
  • murtho  · 技术社区  · 7 年前

    我正在构建一个应用程序,在其中可以看到日志中的实时更改 这个应用程序是用symfonyv4.1构建的。有 this

    我已经设置了所有的要求,使它根据文件的工作。

    • 有一个主题课:

    • 已配置pubsub路由

    • 加载页面时,客户端在javascript中运行

    连接的脚本工作正常,直到我订阅了一个频道/主题。客户端的连接会立即关闭,而服务器不会检测到它。有人知道怎么解决这个问题吗?另外,我很好奇这个响应码WS-1007是什么意思。

    var ws = WS.connect("ws://" + $websocket_host + ":" + $websocket_port);
    
    ws.on("socket/connect", function(session) {
        if (window.$debug) {
            console.log("websocket connected");
        }
    
        console.log(session);
    
        session.subscribe("log/channel", function(uri, payload) {
            console.log(payload);
        });
    });
    
    ws.on("socket/disconnect", function(e) {
        if (window.$debug) {
            console.log("websocket disconnected [reason:" + e.reason + " code:" + e.code + "]");
        }
    });
    

    Javascript日志:

    ~ websocket connected
    ~ websocket disconnected [reason:Connection was closed properly [WS-1007: ] code:0]
    

    服务器日志:

    14:15:39 DEBUG     [websocket] INSERT CLIENT 2926 ["user" => "s:37:"anon-19491835335b991f8bde43b229754494";"] []
    14:15:39 INFO      [websocket] anon-19491835335b991f8bde43b229754494 connected ["connection_id" => 2926,"session_id" => "19491835335b991f8bde43b229754494","storage_id" => 2926] []
    14:15:39 DEBUG     [websocket] GET CLIENT 2926 [] []
    14:15:39 INFO      [websocket] anon-19491835335b991f8bde43b229754494 subscribe to log/channel [] []
    14:15:39 DEBUG     [websocket] Matched route "shop4_log" [] []
    14:15:39 DEBUG     [websocket] Matched route "shop4_log" [] []
    

    主题类:

    namespace App\Service\WebSocket\Topic;
    
    use Gos\Bundle\WebSocketBundle\Router\WampRequest;
    use Gos\Bundle\WebSocketBundle\Topic\TopicInterface;
    use Ratchet\ConnectionInterface;
    use Ratchet\Wamp\Topic;
    
    class LogTopic implements TopicInterface
    {
        public function onPublish(ConnectionInterface $connection, Topic $topic, WampRequest $request, $event, array $exclude, array $eligible)
        {
            $topic->broadcast(['msg' => $event]);
        }
    
        public function getName()
        {
            return "log_topic";
        }
    
        ....
    }
    

    shop4_log:
        channel: log/channel
        handler:
            callback: "log_topic"
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   murtho    7 年前

    因此,我最终找到了解决方案,需要在服务配置中标记主题

    服务.yaml:

    App\Service\Websocket\Topic\LogTopic:
        tags:
            - { name: gos_web_socket.topic }