【发布时间】:2015-12-25 21:13:27
【问题描述】:
我正在使用 socket.io,它在本地运行良好,但是一旦使用 heroku 进行生产,它就会超时。我知道这是因为如果在 55 秒滚动窗口内没有听到任何声音,heroku 将终止/超时 Web 套接字连接。
我遇到的问题是我将 socket.io 的心跳间隔设置为 60000,所以在 60 秒内没有听到任何声音,即在 55 秒窗口之外:
io.set('heartbeat interval', 60000); //heroku timeout with Idle connection error.
我需要某种方式在 55 秒的窗口内轮询服务器,以保持连接处于活动状态。改变心跳间隔并不是一个真正的选择,所以我不知道该怎么做。
【问题讨论】:
-
那可能不行。我正在优雅地处理连接/断开连接事件,但使用用户通知等。它不会像那样工作,因为将有一个断开连接和连接事件的整个过程每 60 秒触发一次。
-
为什么不能设置为小于heroku timeout?
-
我的应用程序对客户端连接采用“按分钟计费”逻辑,因此通过心跳测量连接时间。我可以有效地完成“54 秒前的账单”,但这并不理想。
-
可能在客户端排队客户端请求然后检查套接字状态,如果需要重新打开它,然后发送?
标签: javascript node.js sockets heroku websocket