2016-08-15 97 views
1

스프링 스톰과 Sockjs를 사용하여이 스프링에 대해 websocket 클라이언트로 독립 실행 형 Java 응용 프로그램을 만들려고합니다. 스프링 사양과 spring-portafolio 예제 및Websocket java client Spring + Stomp : 전송 오류 : ConnectionLostException

15:18:01.342 [main] DEBUG com.example.client.WebSocketClientTest - Connecting to : ws://localhost:8080/socket/hello 
15:18:01.541 [WebSocketClient-AsyncIO-1] ERROR com.example.client.MyStompSessionHandler - Transport error 
org.springframework.messaging.simp.stomp.ConnectionLostException: Connection closed 
at org.springframework.messaging.simp.stomp.DefaultStompSession.afterConnectionClosed(DefaultStompSession.java:483) [spring-messaging-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.web.socket.messaging.WebSocketStompClient$WebSocketTcpConnectionHandlerAdapter.afterConnectionClosed(WebSocketStompClient.java:354) [spring-websocket-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.afterTransportClosed(AbstractClientSockJsSession.java:321) [spring-websocket-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.web.socket.sockjs.client.WebSocketTransport$ClientSockJsWebSocketHandler.afterConnectionClosed(WebSocketTransport.java:172) [spring-websocket-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.onClose(StandardWebSocketHandlerAdapter.java:141) [spring-websocket-4.3.2.RELEASE.jar:4.3.2.RELEASE]... 

는 자바 클라이언트 측에서 내 코드는 다음과 같습니다 :

StandardWebSocketClient webSocketClient = new StandardWebSocketClient(); 
List<Transport> transports = new ArrayList<>(); 
transports.add(new WebSocketTransport(webSocketClient)); 
SockJsClient sockJsClient = new SockJsClient(transports); 
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); 
taskScheduler.afterPropertiesSet(); 
String stompUrl = "ws://localhost:8080/socket/hello"; 
WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient); 
stompClient.setMessageConverter(new StringMessageConverter()); 
stompClient.setTaskScheduler(taskScheduler); 
stompClient.setDefaultHeartbeat(new long[] {0, 0}); 

StompSessionHandler sessionHandler = new MyStompSessionHandler(); 
stompClient.connect(stompUrl, sessionHandler); 
stompClient.setTaskScheduler(taskScheduler); 

그리고 서버 측이 스톰프와 SockJs과 스프링 MVC를 사용하여 만들어진 서버가 완벽하게 작동이 오류를 받고 있어요 자바 스크립트 클라이언트, 이것은 나는 다음을 사용했다 :

public void configureMessageBroker(MessageBrokerRegistry config) { 
    config.enableSimpleBroker("/topic"); 
    config.setApplicationDestinationPrefixes("/app"); 
} 
public void registerStompEndpoints(StompEndpointRegistry registry) { 
    registry.addEndpoint("/hello") 
      .setHandshakeHandler(new DefaultHandshakeHandler(new TomcatRequestUpgradeStrategy())) 
      .withSockJS(); 
} 

내가 뭘 잘못하고 있니? 누구든지 저에게 그것을 고칠 방법이나 spring websocket 서버에 연결하는 자바 클라이언트를 만드는 방법에 대한 아이디어를 줄 수 있습니까?

미리 감사드립니다.

답변

1

나는 동일한 문제가있었습니다. 원인은 부분 메시징을 사용할 수 없기 때문에 STOMP Spring/Tomcat WS 클라이언트가 처리 할 수없는 너무 큰 메시지를 수신했습니다.

WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient); 
stompClient.setInboundMessageSizeLimit(Integer.MAX_VALUE); 
: inboundMessageSizeLimit 설정

WebSocketContainer container = ContainerProvider.getWebSocketContainer(); 
container.setDefaultMaxTextMessageBufferSize(MAX_TEXT_MESSAGE_BUFFER_SIZE); 
WebSocketClient wsClient = new StandardWebSocketClient(container); 

가 영향을 미치지 아니합니다 : This StackOverflow answer (나는 MAX_TEXT_MESSAGE_BUFFER_SIZE=20*1024*1024을 설정 한) 나를 위해 일한