NodeJS和Socket.IO

我在使用Socket.ioSocket.io一个奇怪的问题。

通过ZeroMQ接收数据的服务器。 这工作完美。 对于来自ZeroMQ每条消息,我使用sockets.volatile.emit将其发送给所有连接的客户端。 这个问题只出现在大量的连接帐户(超过100个)上,似乎有一个队列正在发送给客户端(客户端接收消息的延迟时间不断增加)

注意:每个连接的客户端都收到来自ZeroMQ的每条消息,因此对于更多的客户端来说,通过socket.IO发送更多的数据。

通过日志/debugging我知道从ZeroMQ接收没有延迟,所有的作品在那一部分。 排放似乎有排队或延迟不断增加。

消息速率为每个客户端80消息/秒。

Note: NodeJS 0.10.20和Socket.IO 0.9.16。

我怎样才能控制,防止客户收到旧信息?

看看这篇文章,它会告诉你很多的基本错误,关于阻塞事件循环,这看起来很像你在做什么。

也许使用工具,如: debugging封锁,我认为这将有助于解决你的问题。 同时debugging您在性能和其他基本问题上造成瓶颈的位置。

或者,在PM2上挂钩您的节点项目,并将其绑定到Keymetrics.IO,这样可以让您更好地了解您的服务器,以及它为什么运行缓慢以及为什么会出现性能瓶颈。

它很难解决你的问题没有代码示例,但这里有3个原因,为什么你的应用程序或你可以创build瓶颈(也许不知不觉):

  • 使用JSON.parse函数parsing一个大的json负载。

  • 尝试在后端的大文件上进行语法突出显示(类似于Ace或highlight.js)。

  • 一次parsing一个大的输出(比如从一个subprocess输出一个git log命令)。

在第二部分的第一篇文章中有更多的信息叫做“阻塞事件循环”

这是一个和你有关的问题。

想要了解更多关于事件循环的信息,我可以热烈地指引您“ 单线程非阻塞IO模型如何在Node.js中工作 ”

下面是Node.js处理模型的一个模型,来看看事件循环及其周围会发生什么

Node.js处理模型

如果事实certificate,你没有以任何可怕的方式阻塞事件循环,那么你可能会碰到什么socket.io可以处理您的具体应用程序的限制。 如果是这种情况,那么你可以考虑扩大你的实例。

看看这篇文章的更多信息: http : //drewww.github.io/socket.io-benchmarking/