2015-02-03 11 views
8

WebSocket 서버 용 Spring WebSocket Stomp 클라이언트에서 작업 중이며 충돌하는 정보가 나타납니다. 나는 그것이 작동하도록하는 2 가지 방법을 발견했으며, 너무 많은 세부 사항에 빠지지 않고 클라이언트 구현의 "올바른"방법으로 생각되는 방법이 궁금합니다.spring-websocket Java 클라이언트를 올바르게 구현하는 방법

누군가 WebSocketConnectionManager가 무엇인지 이해할 수 있습니까?

또한 하나의 질문입니다. websocket 연결을 열어두고 System.in.read() 줄을 작성하지 않고 새 메시지를 받아들이도록 프로그램을 실행하는 방법은 무엇입니까?

1'st 방법 : 직접

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 '방법을 SockJsClient 사용 : 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(); 

내가 주석에 대한을 사용하여이 훨씬 간단하게 만들 수 있다는 것을 알고 사용 @Configuration@Bean하지만 "원시"구현을 시도하므로 모든 것이 어떻게 작동하는지 이해할 수 있습니다.

조금 더 정보 :

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

답변

3

흥미 봄 통합이 WebSocketClient에 대한 구현을 제공하는 경우.

예, 내부적으로는 ConnectionManagerSupport을 사용합니다.

@Configuration에서 구성하는 방법을 보여주는 test-case입니다.

그러나 나는 WebSocketHandler 구현 (SubProtocolWebSocketHandlerStompSubProtocolHandler)을 사용해보아야한다고 생각합니다.

관련 문제