【发布时间】:2020-04-03 20:33:59
【问题描述】:
我有一个用 Java 编写的 WebSocket 服务器,启动时没有任何问题。 (在“ws”端点上)
简单地说, 我想在以下任务中开发客户:
- 创建与服务器的连接
- 订阅已定义的主题(例如“topic/public”)
- 从响应主题接收
- 发送到请求主题
当我使用 Stomp 时,它运行良好。但是当我使用 StandardWebSocketClient 时我不能这样做。
//Init
WebSocketClient client = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(client);
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
StompSessionHandler sessionHandler = new CustomStompSessionHandler();
//Connect
StompSession stompSession = stompClient.connect("ws://localhost:8080/ws", sessionHandler).get();
//Subscribe
stompSession.subscribe("/topic/public", sessionHandler);
//Send Message
stompSession.send("/app/chat.addUser", new ChatMessage(MessageType.JOIN, "New User Added"));
stompSession.send("/app/chat.sendMessage", new ChatMessage(MessageType.CHAT, "Test Message", "Test username"));
现在我想用 SockJsClient 来做这件事。握手和创建连接很容易,但之后,我如何订阅特定主题?
//Init
List<Transport> transports = new ArrayList<>(2);
transports.add(new WebSocketTransport(new StandardWebSocketClient()));
transports.add(new RestTemplateXhrTransport());
SockJsClient sockJsClient = new SockJsClient(transports);
//Connect (Handshake)
WebSocketSession webSocketSession = sockJsClient.doHandshake(new CustomWebSocketHandler(), "ws://localhost:8080/ws").get();
//HOW CAN I SUBSCRIBE ?????
//Send Message (To where? Which Path? Which topic)
WebSocketMessage webSocketMessage = new TextMessage(new String("test Message").getBytes());
webSocketSession.sendMessage(webSocketMessage);
简而言之:使用 SockJsClient 时如何订阅特定主题?
提醒:服务器正常,其他方法(StandardWebSocketClient)运行良好。
【问题讨论】:
标签: java spring spring-boot websocket spring-websocket