Обработка отключенного узла WebSocket(Java) + STOMP + WebRTC

В настоящее время я должен участвовать в проекте, связанном с приложением вызова сообщений P2P. Поэтому обычно на стороне клиента я использую API WebRTC. А на бэкенде, помимо того, что 2 одноранговых узла могут общаться друг с другом, мне нужно обрабатывать логику на каждом этапе вызова, то есть отправлять ответные сообщения соответствующему клиенту. Я хочу использовать WebSocket в качестве сервера сигнализации для одноранговых узлов, и между двумя одноранговыми узлами есть много этапов от начала до конца, например: запрос, запуск, отключение, зависание и т. д. Так что мне все еще нужно чтобы открыть соединение WebSocket даже после процесса сигнализации для проверки отключения, однако я не очень представляю, что я могу сделать, когда одноранговый узел отключился от WebSocket, поэтому я все еще могу использовать WebSocket, чтобы уведомить об этом другого однорангового узла, или обработка некоторой логики, когда одноранговый узел отключается, например, ожидание его повторного подключения в течение определенного интервала времени и т. д. Поскольку я новичок в этом вызывающем проекте, мне нужна помощь.

Короче говоря, как я могу определить, когда одноранговый узел отключен от сервера WebSocket? И можете ли вы привести мне простой пример этого? Большое спасибо!


person Nam V. Do    schedule 26.02.2021    source источник
comment
Используете ли вы веб-сокет с STOMP?   -  person byteHunt3r    schedule 26.02.2021
comment
Да, это так.   -  person Nam V. Do    schedule 26.02.2021
comment
Вы можете прослушивать различные события, чтобы справиться с этим.   -  person byteHunt3r    schedule 26.02.2021
comment
Можно поконкретнее, спасибо.   -  person Nam V. Do    schedule 26.02.2021
comment
Проверьте мой ответ ниже   -  person byteHunt3r    schedule 26.02.2021


Ответы (1)


Основываясь на моем комментарии, вы определяете, когда пользователь отключился, прослушивая событие SessionDisconnectEvent. .

@Component
public class STOMPDisconnectEventListener implements ApplicationListener<SessionDisconnectEvent> {

    @Override
    public void onApplicationEvent(SessionDisconnectEvent event) {
        //event.getSessionId();
        // event.getUser();
    }
}

Я думаю, вы отслеживаете все идентификаторы сеансов веб-сокетов. Затем вы можете определить, какой сеанс пользователя был отключен, на основе идентификатора сеанса или getUser().

Вы также можете прослушивать события SessionConnectEvent, SessionConnectedEvent, SessionSubscribeEvent и SessionUnsubscribeEvent.

person byteHunt3r    schedule 26.02.2021
comment
Спасибо за ваш ответ, я приму этот ответ, как только у меня будет больше времени, чтобы посмотреть на это, и если это сработает для меня. - person Nam V. Do; 26.02.2021
comment
Где я могу найти класс SessionDisconnectEvent? Это класс, который вы реализуете самостоятельно? - person Nam V. Do; 26.02.2021
comment
Нет, не моя реализация. Вы можете найти все вышеперечисленные классы событий сеанса здесь: org.springframework.web.socket.messaging.*. - person byteHunt3r; 26.02.2021
comment
Извините, но как это можно использовать для прослушивания отключенного события? - person Nam V. Do; 27.02.2021
comment
Когда соединение завершается (или отключается), публикуется SessionDisconnectEvent. Вы можете прослушивать и обрабатывать это событие, как и любое другое событие в Spring Boot, либо путем реализации интерфейса ApplicationListener, либо с помощью аннотации @EventHandler. - person byteHunt3r; 28.02.2021