Websocket отключается при подписке - PullRequest
0 голосов
/ 12 сентября 2018

Я создаю приложение, где я могу видеть изменения в реальном времени в журналах Это приложение создано с использованием Symfony v4.1. Существует этот пакет, в котором есть сервер и клиент Web Socket на основе Ratchet и Autobahn.js

Я установил все требования, чтобы он работал в соответствии с документацией.

  • Есть класс темы:

  • настроена маршрутизация pubsub

  • Сервер работает

  • Клиент запускается в javascript при загрузке страницы

Скрипт для подключения работает нормально, пока я не подпишусь на канал / тему. Соединение немедленно закрывается на стороне клиента, и сервер его не обнаруживает. Кто-нибудь знает как это решить? Кроме того, мне любопытно, что означает этот код ответа WS-1007.

Javascript:

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";
    }

    ....
}

pubsub.yaml

shop4_log:
    channel: log/channel
    handler:
        callback: "log_topic"

1 Ответ

0 голосов
/ 13 сентября 2018

Итак, в конце концов я нашел решение, тема должна быть помечена в конфигурации ваших служб

services.yaml:

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