Spring 从WebSocketStompClient设置默认心跳会导致异常
我们试图使用WebSocketStompClient连接到使用SpringWebSocket实现的服务器 我们的客户机是使用Spring4.2.2开发的,在没有覆盖默认心跳的情况下工作得非常好 但是,我希望客户端以2秒的间隔发送心跳,因此修改客户端以设置默认心跳Spring 从WebSocketStompClient设置默认心跳会导致异常,spring,websocket,activemq,stomp,Spring,Websocket,Activemq,Stomp,我们试图使用WebSocketStompClient连接到使用SpringWebSocket实现的服务器 我们的客户机是使用Spring4.2.2开发的,在没有覆盖默认心跳的情况下工作得非常好 但是,我希望客户端以2秒的间隔发送心跳,因此修改客户端以设置默认心跳 WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient); ThreadPoolTaskScheduler taskSche
WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient);
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.afterPropertiesSet();
long heartbeat[] = {2000, 10000};
stompClient.setDefaultHeartbeat(heartbeat);
stompClient.setTaskScheduler(taskScheduler); // for heartbeats, receipts
String url = "ws://localhost:8080/Notify/app";
StompSessionHandler handler = new MyStompHandler();
ListenableFuture<StompSession>session = stompClient.connect(url, handler, "localhost", "8080");
我们使用tyrus客户端1.10、spring websocket 4.2.2(用于websocket客户端)和ActiveMQ 5.11.1作为代理
我尝试设置不同的心跳值,但都会导致异常。
我不确定客户端手动指定心跳时会有什么不同
有人能帮忙吗
谢谢。您找到解决方案了吗?(似乎我也有类似的问题)是的,不要指定hearbeat间隔,使用默认值。这是乒乓球的10分。这可能与运动有关。显然,
WebSocketStompClient
将这些心跳参数传递给一些StompBrokerRelayMessageHandler
,后者通过TcpConnection.onWriteInactivity(…)
对其进行调度。心跳似乎不是以固定的间隔发送的。
Transport Error Connection closed
org.springframework.messaging.simp.stomp.ConnectionLostException: Connection closed
at org.springframework.messaging.simp.stomp.DefaultStompSession.afterConnectionClosed(DefaultStompSession.java:459)
at org.springframework.web.socket.messaging.WebSocketStompClient$WebSocketTcpConnectionHandlerAdapter.afterConnectionClosed(WebSocketStompClient.java:353)
at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.onClose(StandardWebSocketHandlerAdapter.java:143)
at org.glassfish.tyrus.core.TyrusEndpointWrapper.onClose(TyrusEndpointWrapper.java:1190)
at org.glassfish.tyrus.core.TyrusWebSocket.onClose(TyrusWebSocket.java:126)
at org.glassfish.tyrus.core.frame.CloseFrame.respond(CloseFrame.java:131)