Websocket客户端重新连接空闲连接

Posted

技术标签:

【中文标题】Websocket客户端重新连接空闲连接【英文标题】:Websocket Client Reconnect Idle Connection 【发布时间】:2021-06-18 08:20:15 【问题描述】:

我还没有太多使用 WebSockets 的经验,所以我想问一个更笼统的问题,什么是保持稳定连接的最佳方式。

基本上,我在我的应用程序中使用 WebSocket 客户端连接到远程服务器,该服务器会在一段时间不活动(我认为 1 小时左右)后终止空闲连接。为了保持连接处于活动状态,我开始为 WebSocket 实现 onerror 和 onclose 处理函数,以便在发生这种情况时重新连接。这对某些错误很有用,但我注意到有时在长时间不活动之后,连接似乎仍然打开,我能够向套接字发送消息,但我没有收到来自服务器的响应,例如 2直到我实现的套接字的 onclose 处理程序触发并替换套接字。

但是,这对于我的用例来说已经太晚了。处理它的最佳方法是什么?定期关闭并替换我端的连接以确保工作的套接字连接始终打开是一种好习惯吗?例如。通过设置在 WebSocket 上调用 .close() 的时间间隔?有没有人遇到过类似的情况?

【问题讨论】:

【参考方案1】:

我发现这个包https://github.com/pladaria/reconnecting-websocket可以解决Websocket连接的重连问题。它有一个可配置选项列表,其中一个是reconnectionDelayGrowFactor,它决定了重新连接延迟增长的速度。

【讨论】:

【参考方案2】:

使用 socket.io,您可以在客户端传递一些参数来处理套接字连接和超时等。我无法想象 socket.io 是唯一提供这种可配置性的 websocket。我相信他们都这样做。

        this.socket = openSocket('https://yoururl', 
            'force new connection': true,
            'reconnectionAttempts': 'Infinity',
            'timeout': 10000,
            transports: ['websocket']
        );

【讨论】:

【参考方案3】:

我建议您使用robust-websocket 来处理断开连接事件。您可以根据 CloseEvent 的代码设置重连尝试。

【讨论】:

以上是关于Websocket客户端重新连接空闲连接的主要内容,如果未能解决你的问题,请参考以下文章

tomcat 7.0支持的最大活动websocket连接数是多少

浅谈WebsocketAjax轮询和长连接(long pull)

nodejs-websocket介绍

什么项目将使用 websocket 而不是 webrtc?

WebSocket 实战

socket 用disconnect 断开,再重新连接怎么搞