WebSockets(Socket.io)会自动与heroku断开连接吗?

时间:2015-02-05 05:06:05

标签: node.js heroku websocket socket.io scaling

我的app是在heroku的服务器上使用ExpressJS,AngularJS和socket.io构建的。

最初,我的客户端一直与heroku的H12 error code断开连接。我相信我的进程运行时间太长了,但我遵循了它的建议并将socket.io的ping间隔减少到10秒,ping超时减少到25秒。在进行此更改后,我的断开连接发生的频率较低。

即使服务器仅支持4-5个客户端,仍然会发生断开连接。我的应用程序是一个简单的扑克牌游戏,我相信不需要大量的计算。同时,断开连接是非常不受欢迎的,因为它是一个实时游戏。我还使用带有AWS cloudfront的CDN处理了大多数静态资产。因此,我想知道我是否应该升级我的heroku Dyno的CPU,或者是否还需要增加Dynos的数量。

我是否需要在socket.io上进行更多配置调整,例如pingintervals和pingtimeout。或者我应该在Heroku上升级/超越我的Dynos?对不起我对服务器优化的了解很少。非常感谢你的帮助!

以下是正常ping间隔的日志,其中没有事件发生。在这种情况下,根本不应该进行任何深度处理,但是如日志中所示,GET方法花了大约12秒(Heroku将在30秒内断开连接)。

2015-02-05T09:08:59.637350 + 00:00 heroku [router]:at = info method = POST path =" /socket.io/?EIO = 3& transport = polling& t = 1423127340014 -73&安培; SID = MOLTkQP1knsflhZ3AAAB" host = daidi.herokuapp.com request_id = 8faf8459-dfb3-4c3b-a7e2-6528c0ab9850 fwd =" 42.60.78.220" dyno = web.1 connect = 2ms service = 3ms status = 200 bytes = 255

2015-02-05T09:09:12.074210 + 00:00 heroku [router]:at = info method = GET path =" /socket.io/?EIO = 3& transport = polling& t = 1423127340438 -25安培; SID = _5fURAV8_Gn5736HAAAC" host = daidi.herokuapp.com request_id = b54dedb6-1733-414a-8fd3-b8d8fd1f4516 fwd =" 42.60.78.220" dyno = web.1 connect = 1ms service = 12008ms status = 200 bytes = 207

1 个答案:

答案 0 :(得分:0)

单个dyno在支持4-5个客户端时应该没有任何问题(几百个应该没问题)。当然,这是假设您的服务器没有做任何其他cpu密集型的事情。请记住,如果您在服务器上运行阻止操作,则更有可能断开用户连接。

我建议安装一些免费插件(strongloop,nodetime,新文件,无论你喜欢哪种)来深入了解你的cpu /内存/网络级别。安装事件循环滞后模块并定期输出其值以查看是否有任何事情阻碍了事件循环也不是一个坏主意。

最后,还要知道在使用socket.io时看到各种错误是很正常的。它使用各种后备,长轮询等,可以使路由器(期望更传统的非有状态,非实时请求)认为出现了问题。除非你在客户端看到问题,否则我不知道我甚至会担心它。当然,如果你看到客户端问题,那么就忽视所有这些......只是不要为了它而害怕H12。