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

时间:2015-09-28 15:04:10

标签: javascript node.js sockets heroku websocket

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

我遇到的问题是我将socket.io听力间隔设置为60000,因此在60秒内没有听到任何声音,即在55秒窗口之外:

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

我需要一些方法在55秒窗口内轮询服务器以保持连接活动。改变心跳间隔实际上不是一种选择,所以我不确定如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

通常,您希望路由器断开空闲连接,以便它们不会消耗后端的系统资源。面临的挑战是将实际闲置/丢失的连接与实时连接的客户分开,这些客户暂时还没有说过任何话。

一种解决方案是让客户端在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。这样,只要客户端处于活动状态,它就会继续保持与服务器的连接。