如何检测到ROUTER的REQ连接事件

我想要的是?

每当REQ连接requester.connect()调用该host:portROUTER应该检测到这个事件,并do something即在这种情况下, cluster.fork();

我试过了:

  //Start Evented Child Node Processes alongwith a Request REQ Each router.on("accept", function funcCB (fileDesc, endPt) { //fire up a cluster fork for handling Requests console.log("starting a new FORK process"); cluster.fork(); }); 

什么router.on(<event>)应该实际检测到

 requester.connect() 

??

按照此处这些是可用于节点zmq的监视器事件:

这些是根据那里的文档触发的事件:

 connect - ZMQ_EVENT_CONNECTED connect_delay - ZMQ_EVENT_CONNECT_DELAYED connect_retry - ZMQ_EVENT_CONNECT_RETRIED listen - ZMQ_EVENT_LISTENING bind_error - ZMQ_EVENT_BIND_FAILED accept - ZMQ_EVENT_ACCEPTED accept_error - ZMQ_EVENT_ACCEPT_FAILED close - ZMQ_EVENT_CLOSED close_error - ZMQ_EVENT_CLOSE_FAILED disconnect - ZMQ_EVENT_DISCONNECTED 

怎么运行的?

ZeroMQ在于它的架构。 这意味着,抽象的可缩放原型( PUB / SUBPAIRXREQ )正是为这些原型定义的。

干净的架构将I/O-thread从套接字入口“ 行为 ”中分离出来,并把所有的脏东西放在那里: 在这里输入图像说明

这就是说,我不希望ROUTER检测和处理这个,如果在ZeroMQ架构中没有定义这个权限。

怎么做?

对于这个和类似的需求最简单的方法是devise一个自己的复合元素 ,让我们简单地将其绘制为[ [ROUTER] + [SUB] ],其中节点既具有[ROUTER] – 面向行为的行为,一个[SUB] – 信号接收行为,通过另一个host:portSIG上的SUB.bind()暴露给外部世界host:portSIG

这样,远程进程REQ.connect( host:port)PUB.connect( host:portSIG )就可以在devise需要和执行的同时在传输平面和信令平面上运行。

ZeroMQ是一个可爱的ZeroMQ LEGO工具箱。 在这里输入图像描述 享受这些权力。

所以答案就是@Jason 在SO评论部分发布的这个小小的增加

 //start the socket ROUTER monitor router.monitor(500, 0);