Наличие необработанной реализации веб-сокета:
@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 для каждого сообщения.Есть ли другой, лучший способ, как добиться маршрутизации?
Спасибо за помощь!