【问题标题】:Socket.io huge server response time when using xhr-polling使用 xhr-polling 时 Socket.io 巨大的服务器响应时间
【发布时间】:2014-04-05 20:52:43
【问题描述】:

我正在尝试扩展消息传递应用程序。我在后端使用带有 Socket.io 和 Redis-Store 的 nodeJS。客户端可以是iphone原生浏览器,android浏览器..等

我使用 SSL 进行节点连接,使用 Nginx 对套接字连接进行负载平衡。我没有集群我的 socket.io 应用程序,而是在 10 个节点服务器上进行负载平衡(我们有大量用户)。当传输是 Websockets 时,一切看起来都很好,但是当它回退到 xhr-polling 时(如果是旧的 android 手机),我看到 New-relic 的响应时间高达 3000 rpm。而且我必须每隔一小时左右重新启动一次节点服务器,否则服务器会崩溃。

我想知道我是否做错了什么,以及在使用 xhr-polling 传输时是否可以采取任何措施来扩展 socket.io?喜欢增加或减少轮询持续时间?

【问题讨论】:

    标签: node.js sockets nginx scalability load-balancing


    【解决方案1】:

    你没有做错什么,xhr-polling 也称为长轮询。这个名字来源于连接保持打开更长时间的事实,通常直到可以通过线路发送一些答案。连接关闭后,会打开一个新连接,等待下一条信息。

    您可以在此处阅读更多内容http://en.wikipedia.org/wiki/Push_technology#Long_polling

    New Relic 显示轮询请求的响应时间。 Socket.IO 的默认“轮询持续时间”为 20 秒。

    轮询持续时间越短,您将获得更高的 RPM,轮询持续时间越长,您将获得更小的 RPM。我会考虑增加轮询持续时间或只保留 20 秒的默认值。

    此外,为了防止 New Relic 显示与长轮询无关的数据,您可以在应用程序中需要的 newrelic.js 中添加忽略规则。这在此处的 newrelic npm 模块文档https://www.npmjs.org/package/newrelic#rules-for-naming-and-ignoring-requests

    中也有详细说明

    【讨论】:

    • 我在我的 new-relic npm 包中添加了忽略规则,情况看起来好多了
    猜你喜欢
    • 2013-10-09
    • 2015-05-04
    • 2011-05-29
    • 2013-08-01
    • 2013-04-06
    • 2013-08-20
    • 1970-01-01
    • 2012-03-03
    • 2019-05-09
    相关资源
    最近更新 更多