如何检测到ROUTER的REQ连接事件
我想要的是?
每当REQ
连接requester.connect()
调用该host:port
, ROUTER
应该检测到这个事件,并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
/ SUB
, PAIR
, XREQ
)正是为这些原型定义的。
干净的架构将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);