WebSocket 在几个时间间隔之间不断断开连接

Posted

技术标签:

【中文标题】WebSocket 在几个时间间隔之间不断断开连接【英文标题】:WebSocket keeps disconnecting between several time interval 【发布时间】:2016-10-05 13:05:24 【问题描述】:

我们正在使用 Web 套接字在服务器和 android 应用程序之间进行实时通信。但是这里的主要问题是网络套接字在几个时间间隔内不断断开连接,我们无法在两侧设置套接字超时。关于这个主题被问了多少问题,但结果对我们没有帮助。

服务器:对于我们使用 .net 的服务器,样本取自 https://github.com/paulbatum/WebSocket-Samples 下我们获取 AspNetChat 文件夹并从中开发套接字服务器

Android客户端:示例取自java-websocket-1.3.0,android中的代码写成如果socket断开会自动重新连接。

我们面临的主要问题是在一段时间间隔后说大约 30 分钟服务器和客户端之间的 websocket 连接不工作。我们无法说它是否断开连接,但是当从 android 发送消息时,日志说它已连接到服务器并且服务器没有在 onMessage 函数中收到消息。

如果有解决方案,这将更有帮助,如果有任何其他替代协议,我们也可以检查。

提前致谢

【问题讨论】:

我很欣赏那个给负数的天才。但是一个问题,你能告诉我这个问题有什么问题或者如何解决这个问题。 您的问题可能被否决了,因为它非常广泛。许多事情都可能导致这种情况,如果您使用套接字,通常需要更多技术数据。作为焦点,看看库是否返回关闭的原因,Wireshark 或 mitmproxy 告诉你什么,如果你改变网络会发生什么,等等。 差点忘了:Firefox 和 Chrome 也可以使用其内置调试器(或 Firebug 等插件)调试套接字连接。 HI ǝɲǝɲbρɯͽ,经过一段时间后,它正在服务器中执行错误块。这仅用于移动应用程序,我们还没有进入网站。 【参考方案1】:

经过长时间的研究,我们发现服务器端的 webSocket 会在某个时间间隔(比如 10 分钟空闲时间)产生错误,并且在此空闲期间,使用 onClose() 方法调用 onError() 方法。在此过程之后,服务器并未完全关闭套接字,而是仅从其内存中删除。为了解决这个问题,我们制作了一条保持活动消息,即使应用程序和服务器都知道并重新连接套接字时出现任何错误,该消息也会每分钟发送并确认。

结果:添加保活方法解决了我们的问题。

【讨论】:

以上是关于WebSocket 在几个时间间隔之间不断断开连接的主要内容,如果未能解决你的问题,请参考以下文章

几秒钟后 Websocket 连接断开

服务器发送事件 - 在几次断开连接后流未重新连接

通道 Websocket 立即与 ssl 断开连接

uni-app中websocket的使用 断开重连、心跳机制

js websocket 心跳检测,断开重连,超时重连

2018-03-26(websocket自动断开连接)