NodeJS和Socket.IO

sha*_*hay 10 javascript node.js socket.io

我在使用NodeJS和时遇到一个奇怪的问题Socket.io.

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

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

通过日志/调试我知道接收来自ZeroMQ没有延迟,所有工作都在该部分.发射似乎有一个不断增加的队列或延迟.

消息速率是80每个客户端的消息/秒.

Note: NodeJS 0.10.20和Socket.IO 0.9.16.

如何控制它以防止客户端收到旧邮件?

Sim*_*bæk 13

查看这篇文章它将告诉你许多基本错误,它是关于阻止事件循环,这似乎与你的行为非常相似.

也许使用如下的工具:DebugBlocked我认为这有助于解决你的问题.两者都可以调试在性能和其他基本问题上创建瓶颈的位置.

或者在PM2上挂起您的节点项目并将其绑定到Keymetrics.IO,这将为您提供良好的服务器视图,以及为什么它运行缓慢以及为什么会造成性能瓶颈.

没有代码示例很难解决您的问题,但这里有3个原因可以解释为什么您的应用或者您可能会产生瓶颈(可能是在不知不觉中):

  • 使用JSON.parse函数解析大型json有效负载.

  • 尝试在后端的大文件上进行语法突出显示(使用Ace或highlight.js之类的东西).

  • 一次性解析大输出(例如从子进程输出git log命令).

更多信息在第2节的第一篇文章中称为"阻止事件循环"

这是一个与你有关的问题.

想要了解更多有关Event循环的信息,我可以热情地指导您" 在Node.js中如何使用单线程非阻塞IO模型 "

这是Node.js Processing模型的模型,用于查看事件循环及其周围环境发生的情况

Node.js处理模型