























这是一个创建于 966 天前的主题,其中的信息可能已经有所发展或是发生改变。
做了个 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)
第 1 条附言 · 2023 年 10 月 23 日
补充一下,目前的状态是前端和后端都会互相做心跳,前端还有断线重连机制。因为某些业务需要达到 100%到达率。所以任何异常都有可能导致消息推送失败。不知道从哪里下手了😰😰😰
1 coderxy 2023 年 10 月 23 日断开很正常吧? 中间任何一个环节网络波动啥的都会导致断开, 做好重连不就行了? |
2 opengps 2023 年 10 月 23 日公网环境下,通信要做的就是断线自动重连,而不是一个连接用到老 |
3 stinkytofu 2023 年 10 月 23 日也可以找一个成熟的库, 库内部维护连接, 就不用操那么心了 |
4 skcy 2023 年 10 月 23 日如果是浏览器 tab 在非激活状态,或者电脑休眠的时候,浏览器内定时器 会触发 任务 延时机制,可尝试 webworker (休眠依然无解) |
5 nothingistrue 2023 年 10 月 23 日EOFException 是异常到达流尾部,这不一定是连接被断开了,你可能更需要关注 IO 流的生命周期,或者缓冲区的配置。 至于心跳,它更应该当作被断开的感知器,不应该作为连接维持的保证器。 |
8 Parva 2023 年 10 月 23 日裸 websocket 手撸心跳?找些库、协议套一套吧 |
9 coyove 2023 年 10 月 23 日如果是浏览器的话,tab 切换,进入后台,safari 节能模式,都可能导致 websocket 不可用。这样的策略是无法预知的,只能做好重连 |
11 0xsui 2023 年 10 月 23 日 via Android建议你用 SocketIO ,比自己写的更完善,更稳定 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。