我正在尝试扩展消息传递应用。我在后端使用带有Socket.io和Redis-Store的nodeJS。客户端可以是iphone本机浏览器,android浏览器..等等
我使用SSL进行节点连接,使用Nginx对套接字连接进行负载均衡。我没有集群我的socket.io应用程序,而是我负载平衡超过10个节点服务器(我们有大量的用户)。当传输是Websockets时,一切看起来都很好,但是当它回到xhr-polling(在旧的Android手机的情况下)时,我看到New-relic中的巨大响应时间高达3000 rpm。我必须每小时左右重启我的节点服务器,否则服务器崩溃。
我想知道我是否做错了什么,如果有任何措施我可以采用xhr-polling传输来扩展socket.io?喜欢增加或减少投票持续时间?
答案 0 :(得分:3)
你没有做错任何事,xhr-polling也被称为长轮询。该名称来自这样一个事实,即连接保持打开的时间更长,通常直到某些答案可以通过线路发送。连接关闭后,将打开一个新连接,等待下一条信息。
您可以在此处详细了解http://en.wikipedia.org/wiki/Push_technology#Long_polling
New Relic显示轮询请求的响应时间。 Socket.IO的默认“轮询持续时间”为20秒。
对于较小的轮询持续时间,您将获得更高的RPM,对于更高的轮询持续时间,您将获得更小的RPM。我会考虑增加轮询时间或只保持20秒默认值。
此外,为了防止New Relic显示长轮询的不相关数据,您可以在app中需要的newrelic.js中添加忽略规则。这也在新的npm模块文档https://www.npmjs.org/package/newrelic#rules-for-naming-and-ignoring-requests
中详细说明