javascript - NodeJS 和 Socket.IO

标签 javascript node.js socket.io

我在使用 NodeJSSocket.io 时遇到了一个奇怪的问题。

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

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

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

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

注意:NodeJS 0.10.20 和 Socket.IO 0.9.16。

如何控制它以防止客户端收到旧消息?

最佳答案

查看此 article它会告诉你很多基本的错误,它是关于阻塞事件循环的,这看起来和你做的很相似。

也许使用以下工具:DebugBlocked我认为这将有助于解决您的问题。两者都可以调试您在哪里造成性能瓶颈和其他基本问题。

或者将您的 Node 项目挂接到 PM2 并将其绑定(bind)到 Keymetrics.IO这将使您能够很好地了解您的服务器以及它运行缓慢的原因以及为什么会出现性能瓶颈。

如果没有代码示例,很难解决您的问题,但以下是您的应用或您可能会造成瓶颈的 3 个原因(可能是在不知不觉中):

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

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

  • 一次性解析大输出(例如来自子进程的 git log 命令的输出)。

更多信息见第article在名为 “阻塞事件循环”的第 2 节中

一个与你有关的问题, this one

想了解更多关于事件循环的信息,我可以热情地引导您了解胎面 "How the single threaded non blocking IO model works in Node.js "

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

Node.js processing model

关于javascript - NodeJS 和 Socket.IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19539219/

相关文章:

php - 使用 php 和 javascript 从弹出窗口传递多个 MySQL 结果集

javascript - 通过我自己的类克隆另一个元素的内容和顺序

javascript - Websocket 发送多个事件并在客户端处理多个事件

node.js - 如何使用 MongoDB/mongoose 有效地获取帖子的评论?

javascript - NodeJS socket.io 应用程序在按下按钮时卡住

javascript - Auth0 在用户登录后使用我自己的数据库进行 CRUD

javascript - 如何通过ldapjs修改memberOf字段

node.js - Node js删除目录中的旧文件

javascript - 我应该在哪个端口上运行我的 Socket.IO 服务器?

javascript - 无法使用 socket.io 更新用户