Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正确实现SpringWebSocket java客户端_Java_Spring_Spring Websocket - Fatal编程技术网

如何正确实现SpringWebSocket java客户端

如何正确实现SpringWebSocket java客户端,java,spring,spring-websocket,Java,Spring,Spring Websocket,我正在为我的WebSocket服务器开发一个SpringWebSocket Stomp客户端,我得到的信息有冲突。 我已经找到了两种方法来实现它,在不深入太多细节的情况下,我想知道哪种方法被认为是实现客户机的“正确”方法 有人能帮我理解WebSocketConnectionManager的用途吗 还有一个问题,我如何保持websocket连接打开,程序运行以接受新消息,而不必编写System.in.read()行 第一种方法:直接使用SockJsClient URI uri = new URI(

我正在为我的WebSocket服务器开发一个SpringWebSocket Stomp客户端,我得到的信息有冲突。 我已经找到了两种方法来实现它,在不深入太多细节的情况下,我想知道哪种方法被认为是实现客户机的“正确”方法

有人能帮我理解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();

如果有意思的话,Spring集成为提供了一个实现

是的,它在内部使用
ConnectionManagerSupport

下面是一个示例,演示如何从
@Configuration
配置它

但我认为您应该尝试使用现成的
WebSocketHandler
实现-
subtocolwebsockethandler
,以及
stompsubtocolhandler

StandardWebSocketClient simpleWebSocketClient = new StandardWebSocketClient();
List<Transport> transports = new ArrayList<>(1);
transports.add(new WebSocketTransport(simpleWebSocketClient));

SockJsClient sockJsClient = new SockJsClient(transports);
sockJsClient.setMessageCodec(new Jackson2SockJsMessageCodec());

StompMessageHandler messageHandler = new StompMessageHandler();
StompWebSocketHandler websocketHandler = new StompWebSocketHandler(messageHandler, new StringMessageConverter());

WebSocketConnectionManager manager = new WebSocketConnectionManager(sockJsClient, websocketHandler, "ws://localhost:8080/stomp");

manager.start();

System.in.read();
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-websocket</artifactId>
    <version>4.1.4.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-messaging</artifactId>
    <version>4.1.4.RELEASE</version>
</dependency>
<dependency>
    <groupId>javax.websocket</groupId>
    <artifactId>javax.websocket-client-api</artifactId>
    <version>1.1</version>
</dependency>
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-websocket</artifactId>
    <version>8.0.0-RC10</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.0</version>
</dependency>