关于node.js消息队列的问题
发布于 8 年前 作者 beiyio 34569 次浏览 最后一次编辑是 5 年前

以前做服务端程序总是少不了去做消息的队列缓冲。学习了node挺久了。一直在研究用node.js去做服务( tcp的协议 socket)但是始终没有看到类似消息队列的东西~不知道何故。希望大神们给解答下.特别是高并发的时候

22 回复

消息队列是 [zeromq][zeromq] 之类工具么? [zeromq]: https://github.com/JustinTulloss/zeromq.node

不是啊,就是为了增加接收消息的速度,将消息先缓冲起来,然后一个一个处理

不是啊,就是为了增加接收消息的速度,将消息先缓冲起来,然后一个一个处理

高手们给点意见啊

nodejs和消息队列没有必然联系吧 根据实际需要,你需要把nodejs收到的请求写消息队列的话,那你就用呗 不太明白楼主的意思.

研究下NET模块就知道,新建连接/某个连接收到新信息后调用处理函数,这些都是硬消耗,你队不队列它都只能承受小于1000次/秒的并发;不相信可以自己做压力测试

为了一个一个处理而把消息队列起来这是毫无意义的,本来就是1个1个处理的,因为是单线程; 你不队列V8也会队列,你再队列一次那就是… 先弄清楚JS的运行机制…

不用CLUSTER之类的话,1000并发已经是非常大的数字了,这么大的业务量应该用其它成熟的解决方案

补充一下1000并发上下和CPU有关,但差不多就是这个数量级

赞同此观点,在单线程异步模式下,只用全速去响应事件就行了。如果还是慢,那表明要么是性能根本不足,要么表示设计有问题,导致事件响应过慢,阻塞了后续事件。

我理解的是单纯的用nodejs尽可能多的hold住连接,然后把消息扔进专门的消息队列, 这个消息队列需要被其它服务拿去用,nodejs本来就没啥事情做.

@beiyio node.js本身就是事件驱动的语言,整个队列处理加载方式也都是通过一个计时器setTimeout/setInterval 循环调用执行整个队列,一个队列就像一个一栋楼房,要建立起一栋楼你要建立起规则后可以按照先后顺序架构.有一个node kue的包,你可以npm install kue了解一下,地址:https://github.com/LearnBoost/kue

但是node的队列是没有优先级的,自己实现的队列可以是带有优先级的吧。

@liuyanghejerry 您是想让V8假死掉,对么

感谢各位的答复,受教了

nodejs实现消息队列

有async包,里面有个queue方法,实现了队列机制,不知道适合不适合你的需求。一般业务量,压入1000个任务应该没问题,你可以试下。

@jimokanghanchao node不需要了,有请求过来直接异步Io

朴大的 Bagpipe 好像蛮适合需求的~~

试试这个基于Promise做的队列. https://github.com/cnwhy/queue-fun

@cnwhy 我在想 var Queue = new queue-fun.Queue() 是怎么把 减号 用出来的

回到顶部