套接字.node.js和heroku上的IO,空闲超时错误

socket.io on node.js and heroku, idle timeout error

本文关键字:超时 错误 IO 上的 node js heroku 套接字      更新时间:2023-09-26

我使用socket。Io,它在本地运行得很好,但是一旦使用heroku投入生产,它就会超时。我知道这是因为如果在55秒的滚动窗口内没有听到任何消息,heroku将杀死/暂停web套接字连接。

我遇到的问题是我正在设置套接字。IO心跳间隔为60000,因此60秒内什么都听不到,即在55秒窗口之外:

io.set('heartbeat interval', 60000); //heroku timeout with Idle connection error. 

我需要某种方式在55秒的窗口内轮询服务器,以保持连接存活。更改心跳间隔不是一个真正的选项,所以我不确定如何去做这个

通常,您希望路由器断开空闲连接,这样它们就不会消耗后端系统资源。我们面临的挑战是将实际空闲/丢失的连接和实时连接的客户端分开,这些客户端只是有一段时间没有说任何事情。

一种解决方案是让客户端在55秒的窗口内ping服务器。下面是一个例子:

https://github.com/hunterloftis/websocket-ping/blob/2dd45b100a754ee8b151ab3d16d2ee3787d2dc8e/index.html L65

https://github.com/hunterloftis/websocket-ping/blob/2dd45b100a754ee8b151ab3d16d2ee3787d2dc8e/index.html L80-L83

基本上就是io.emit('ping')setInterval上。这样,只要客户端还活着,它就会继续保持与服务器的连接。