Ratchet + Symfony3: как получить доступ к текущему серверу извне

Вот моя команда Symfony3, которую я использую для сервера веб-сокетов.

    public function __construct(ChatFlowProcessor $chatManager, int $webSocketPort)
    {
        $this->chatManager = $chatManager;
        $this->webSocketPort = $webSocketPort;
        parent::__construct();
    }

    $server = IoServer::factory(
        new HttpServer(
            new WsServer(
                $this->chatManager
            )
        ),
        $this->webSocketPort
    );
    $server->run();

Как видите, у меня есть chatManager, просто использующий автопроводку Symfony3. Сервис реализует Ratchet MessageComponentInterface.

Теперь я хочу получить доступ к серверу извне. Я имею в виду, отправить сообщение клиенту веб-сокета, используя мой chatManager, видимо, мне нужно получить доступ к экземпляру chatManager, который хранится в WsServer, и сохранить информацию обо всех активных соединениях.

Является ли это возможным? Спасибо.


person Lunin Roman    schedule 31.08.2018    source источник


Ответы (1)


Вам не нужен доступ к chatManager только для отправки сообщений. Это чат-сервер, предназначенный только для передачи сообщений от/всем своим клиентам.

Просто создайте клиент веб-сокета, подключите его к своему серверу (вместе с другими клиентами) и начните отправлять (и получать) сообщения. Любая специальная функциональность (например, отправить сообщение только одному клиенту или получить список всех клиентов и т. д.) должна быть реализована в chatManager (Ratchets MessageComponentInterface).

Возможно, я неправильно понял вопрос, тогда извините.

person Sven Liivak    schedule 07.09.2018
comment
Я думаю, я понял, что вы имеете в виду, я действительно сохраняю все функции, связанные с чатом, в chatManager, но теперь у меня есть особое поведение, когда пользователь Symfony удаляется, и мне нужно описать поведение для моего приложения чата, у меня есть проблема чтобы заметить это событие. - person Lunin Roman; 07.09.2018
comment
Сравните пользователей чата с пользователями Symfony в chatManager -> onMessage. Если кто-то удален из Symfony, закройте его соединение с чатом. - person Sven Liivak; 07.09.2018