我在java中有一个websocket-stomp客户端应用程序。它按预期工作,但是当我发送大约16k字节或更大的消息时。它正在抛出ConnectionLostException
。我查了一下javascript客户端。在javascript中,客户端以大约16k字节的块发送和接收数据,即使大小增加到100k字节也能正常工作。我在stomp文档中检查了大小限制,默认情况下为~65kb。这种情况的原因是什么,因为手动分块数据是一项复杂的任务,需要时间。任何意见,将不胜感激。
堆栈跟踪
org.springframework.messaging.simp.stomp.ConnectionLostException: Connection closed
11:48:31.001 [WebSocketClient-AsyncIO-1] ERROR com.demo.webSocket.lib.usage.ExampleClientLib - Connection Closed
at org.springframework.messaging.simp.stomp.DefaultStompSession.afterConnectionClosed(DefaultStompSession.java:487)
at org.springframework.web.socket.messaging.WebSocketStompClient$WebSocketTcpConnectionHandlerAdapter.afterConnectionClosed(WebSocketStompClient.java:354)
at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.onClose(StandardWebSocketHandlerAdapter.java:141)
at org.apache.tomcat.websocket.WsSession.fireEndpointOnClose(WsSession.java:535)
at org.apache.tomcat.websocket.WsSession.onClose(WsSession.java:513)
at org.apache.tomcat.websocket.WsFrameBase.processDataControl(WsFrameBase.java:341)
at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:283)
at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:127)
at org.apache.tomcat.websocket.WsFrameClient.processSocketRead(WsFrameClient.java:78)
at org.apache.tomcat.websocket.WsFrameClient.access$300(WsFrameClient.java:31)
at org.apache.tomcat.websocket.WsFrameClient$WsFrameClientCompletionHandler.completed(WsFrameClient.java:133)
at org.apache.tomcat.websocket.WsFrameClient$WsFrameClientCompletionHandler.completed(WsFrameClient.java:117)
at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126)
at sun.nio.ch.Invoker$2.run(Invoker.java:218)
at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
答案 0 :(得分:-1)
首先,您能否在客户端提供ConnectionLostException
例外的堆栈跟踪?
其次,我认为下载Spring Framework source并将其链接到您拥有的Spring Framework二进制文件可能会有所帮助,以便您可以通过将IDE设置为调试并查看代码正在死亡的具体位置和原因。停在org.springframework.messaging.simp.stomp.ConnectionLostException
上或在StompSession.send()
方法上设置断点并逐步完成。
错误可能在Tomcat或Stomp中,可能是其中一个或另一个无法处理异步或部分消息传递。
还要看看这些其他问题,因为它们似乎与你的有关:
特别是第一个链接的答案:
...内部spring java websocket stomp客户端不具备部分消息传递功能,也不能使用消息缓冲区的大小进行配置。
尝试的另一件事可能是使用Glassfish而不是Tomcat来运行它。