javascript – NodeJS&Socket.IO

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

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

注意:每个连接的客户端从ZeroMQ接收到每个消息,因此基本上为了更多的客户端,通过socket.IO发送更多的数据.

通过Logs / Debug我知道从ZeroMQ的接收没有任何延迟,所有的工作在那一部分.排放似乎有一个队列或延迟不断增加.

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

注意:NodeJS 0.10.20和Socket.IO 0.9.16.

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

解决方法

检查这个 article它会告诉你很多基本的错误,它是关于阻止事件循环,这似乎很像你在做什么.

也许使用如:DebugBlocked这样的工具,我认为这将有助于解决你的问题.两者都可以调试您在性能方面创建瓶颈其他基本问题.

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

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

>使用JSON.parse函数解析一个大的json有效负载.
>尝试在后端的一个文件上执行语法高亮(类似于Ace或highlight.js).
>一次解析大量输出(例如从子进程输出git log命令).

更多信息在第07节第2节中称为“阻止事件循环”

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

想知道更多关于事件循环,我可以热烈地指导你踏上“How the single threaded non blocking IO model works in Node.js

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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...