2015-02-03 23 views
8

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@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> 

Trả lời

3

Nếu nó là thú vị Integration Spring cung cấp một thực hiện cho WebSocketClient.

Và có, nội bộ nó sử dụng ConnectionManagerSupport.

Đây là test-case minh họa cách định cấu hình từ @Configuration.

Nhưng tôi nghĩ bạn nên thử với triển khai WebSocketHandler ngoài hộp mới nhất - SubProtocolWebSocketHandlerStompSubProtocolHandler.

Các vấn đề liên quan