Tôi đang làm việc trên một máy khách Stomp Spring WebSocket cho Máy chủ WebSocket của tôi và tôi đang nhận được thông tin xung đột. Tôi đã tìm thấy 2 cách để làm cho nó hoạt động và không đi vào chi tiết quá nhiều, tôi đã tự hỏi cách nào được coi là cách "đúng" để triển khai ứng dụng khách.Làm thế nào để thực hiện chính xác một máy khách java web -ockets
Ai đó có thể giúp tôi hiểu WebSocketConnectionManager là gì?
Ngoài ra, còn một câu hỏi nữa, làm cách nào để giữ kết nối websocket mở và chương trình đang chạy để chấp nhận thư mới mà không cần phải viết dòng System.in.read().
1'st cách: Sử dụng SockJsClient trực tiếp
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();
2'nd cách: Sử dụng 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());
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();
Tôi biết rằng tôi có thể làm cho rất nhiều đơn giản hơn bằng cách sử dụng các chú thích cho @Configuration
và @Bean
nhưng tôi đang cố gắng thực hiện "thô" để tôi có thể hiểu mọi thứ hoạt động cùng nhau như thế nào.
Một chút biết thêm thông tin:
<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>