Маршрутизация места назначения веб-сокета в Spring-boot - PullRequest
0 голосов
/ 25 августа 2018

Наличие необработанной реализации веб-сокета:

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MessageHandler(), "/websocket")
                .setAllowedOrigins("*")
                .addInterceptors();;
    }
}

Обработчик:

public class MessageHandler extends TextWebSocketHandler {
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        // The WebSocket has been closed
    }
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        String auth = (String) session.getAttributes().get("auth");
        System.out.println(auth);

        session.sendMessage(new TextMessage("You are now connected to the server. This is the first message."));
    }
    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage textMessage) throws Exception {
        // A message has been received

    }
}

Клиент веб-сокета подключается к серверу (рукопожатие и т. Д.) С помощью /websocket URL, например, ws://localhost:8080/websocket

Однако теперь, когда соединение установлено, есть ли способ, как маршрутизировать сообщения?Допустим, у меня есть приложение, которое обеспечивает чат и некоторые всплывающие функции (для простоты, скажем, пользователь отправляет всплывающее сообщение и показывает некоторые всплывающие окна всем своим друзьям в приложении).

Конечно, яхотел бы перенаправить сообщения чата на /chat и всплывающее окно на /popup.

Один из способов добиться этого - отправить сообщение json на сервер и проанализировать его, например:

    protected void handleTextMessage(WebSocketSession session, TextMessage textMessage) throws Exception {
        String path = getRouteFromJsonMessage(textMessage);
        if( ! "".equals(path) && path.equals("chat")
           ....
        if( ! "".equals(path) && path.equals("popup")
          ....

    }

Но это кажется слишком медленным, анализируя json для каждого сообщения.Есть ли другой, лучший способ, как добиться маршрутизации?

Спасибо за помощь!

1 Ответ

0 голосов
/ 25 августа 2018

Почему бы вам просто не зарегистрировать два разных MessageHandlers

public class WebSocketConfig implements WebSocketConfigurer {
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new ChatMessageHandler(), "/chat")
                    .setAllowedOrigins("*")
                    .addInterceptors()
                .addHandler(new PopUpHandler(), "/popup") //etc;

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...