Javascript node.js和heroku上的socket.io,空闲超时错误

Javascript node.js和heroku上的socket.io,空闲超时错误,javascript,node.js,sockets,heroku,websocket,Javascript,Node.js,Sockets,Heroku,Websocket,我使用的是socket.io,它在本地工作得很好,但一旦与heroku一起投入生产,它就会超时。我知道这是因为如果在55秒的滚动窗口中没有听到任何声音,heroku将杀死/中断web套接字连接 我遇到的问题是,我正在将socket.io hearbeat interval设置为60000,以便在60秒内听不到任何声音,即在55秒窗口之外: io.set('heartbeat interval', 60000); //heroku timeout with Idle connection erro

我使用的是socket.io,它在本地工作得很好,但一旦与heroku一起投入生产,它就会超时。我知道这是因为如果在55秒的滚动窗口中没有听到任何声音,heroku将杀死/中断web套接字连接

我遇到的问题是,我正在将socket.io hearbeat interval设置为60000,以便在60秒内听不到任何声音,即在55秒窗口之外:

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

我需要某种方法在55秒的窗口内轮询服务器,以保持连接处于活动状态。更改心跳间隔实际上不是一个选项,因此我不确定如何执行此操作。

通常,您希望路由器断开空闲连接,这样它们就不会占用后端的系统资源。面临的挑战是将实际空闲/丢失的连接和实时连接的客户端分离开来,因为它们已经有一段时间没有说任何话了

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


基本上只需在
setInterval
上执行
io.emit('ping')
。这样,只要客户端处于活动状态,它就会继续保持与服务器的连接。

通常,您希望路由器断开空闲连接,这样它们就不会占用后端的系统资源。面临的挑战是将实际空闲/丢失的连接和实时连接的客户端分离开来,因为它们已经有一段时间没有说任何话了

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


基本上只需在
setInterval
上执行
io.emit('ping')
。这样,只要客户端处于活动状态,它就会继续保持与服务器的连接。

这对您有用吗?那可能不行。我正在优雅地处理连接/断开连接事件,但有用户通知等。它不会像那样工作,因为会有一个断开连接和连接事件的整个过程每60秒触发一次。为什么不能将其设置为小于heroku超时?我的应用程序对客户端连接采用“按分钟计费”逻辑,因此可以测量通过心跳的连接次数。我可以有效地做一个“按54秒计费,但这并不理想。可能在客户端将客户端请求排队,然后检查套接字状态,必要时重新打开,然后发送?这对您有用吗?”?那可能不行。我正在优雅地处理连接/断开连接事件,但有用户通知等。它不会像那样工作,因为会有一个断开连接和连接事件的整个过程每60秒触发一次。为什么不能将其设置为小于heroku超时?我的应用程序对客户端连接采用“按分钟计费”逻辑,因此可以测量通过心跳的连接次数。我可以有效地在54秒内完成一个“账单”,但这并不理想。也许在客户端将客户端请求排队,然后检查套接字状态,如果需要,重新打开它,然后发送?