我正在为我的WebSocket服务器开发一个Spring WebSocket Stomp Client,我收到了相互矛盾的信息.我找到了两种方法让它工作,而没有太多细节我想知道哪种方式被认为是实现客户端的"正确"方式.
有人可以帮我理解WebSocketConnectionManager的用途吗?
另外,还有一个问题,我如何保持websocket连接打开,程序运行以接受新消息,而不必编写System.in.read()行.
第一种方式:直接使用SockJsClient
URI uri = new URI("ws://localhost:8080/stomp");
StandardWebSocketClient simpleWebSocketClient = new StandardWebSocketClient();
List<Transport> transports = new ArrayList<>(1);
transports.add(new WebSocketTransport(simpleWebSocketClient));
SockJsClient sockJsClient = new SockJsClient(transports);
sockJsClient.setMessageCodec(new Jackson2SockJsMessageCodec());
StompMessageReceiver messageHandler = new StompMessageReceiver();
StompWebSocketHandler websocketHandler = new StompWebSocketHandler(messageHandler, new StringMessageConverter());
try {
this.webSocketClient.doHandshake(websocketHandler, null, uri).get();
} catch (InterruptedException | ExecutionException e) {
throw new IllegalStateException(e);
}
System.in.read();
Run Code Online (Sandbox Code Playgroud)
第二种方式:使用WebSocketConnectionManager
StandardWebSocketClient simpleWebSocketClient = new StandardWebSocketClient();
List<Transport> transports = new ArrayList<>(1);
transports.add(new WebSocketTransport(simpleWebSocketClient));
SockJsClient sockJsClient = new SockJsClient(transports);
sockJsClient.setMessageCodec(new Jackson2SockJsMessageCodec()); …Run Code Online (Sandbox Code Playgroud)