以前做服务端程序总是少不了去做消息的队列缓冲。学习了node挺久了。一直在研究用node.js去做服务( tcp的协议 socket)但是始终没有看到类似消息队列的东西~不知道何故。希望大神们给解答下.特别是高并发的时候
不是啊,就是为了增加接收消息的速度,将消息先缓冲起来,然后一个一个处理
不是啊,就是为了增加接收消息的速度,将消息先缓冲起来,然后一个一个处理
高手们给点意见啊
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
rabbitmq
@cnwhy 我在想 var Queue = new queue-fun.Queue() 是怎么把 减号 用出来的
rabbitmq