WebSocket 频繁爆出异常

2023-10-23 09:55:27 +08:00
 looveh

做了个 WebSocket 连接,客户端通过定时发送心跳。但是时间一长发现还是会自动断开,心跳时间是 30s 一次,ng 也做了如下配置:

proxy-read-timeout:'3600'
proxy-send-timeout:'3600'

有没有大佬出现过这种情况? 错误如下:

 java.io.EOFException: null

 	at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1345)

 	at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1255)

 	at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:75)

 	at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:183)

 	at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:162)

 	at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:156)

 	at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60)

 	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:59)

 	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)

 	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)

 	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)

 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)

 	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

 	at java.base/java.lang.Thread.run(Thread.java:829)
1899 次点击
所在节点   WebSocket
23 条回复
coderxy
2023-10-24 11:22:56 +08:00
@looveh 实时性非常高就不应该用 tcp , 可以学游戏用 udp ,只要网络不是太废都能近实时送达。
looveh
2023-10-24 13:07:30 +08:00
@coderxy 😂其实是这个服务已经存在了,刚好有这样的业务,并且刚好有这样一个推送的服务,所以就直接用上了。目前正在考虑使用 stomp 替换
looveh
2023-10-26 16:28:42 +08:00
@mmdsun 大佬。用 stomp 的时候我发现每次订阅都是自动生成新的 Queue ,然后用我的订阅地址做 routingkey 关联。这样的话是不是意味着我如果有 1w 个用户(用户登录订阅)同时登录,就会在 mq 生成 1w 个队列?这怎么扛得住呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/984391

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX