2014-07-21 29 views
1

我正在構建node.js中的一個偏執狂海盜。從一些python代碼開始:我應該如何處理node.js中ZMQ的輪詢?

poller = zmq.Poller() 

liveness = HEARTBEAT_LIVENESS 
interval = INTERVAL_INIT 

heartbeat_at = time.time() + HEARTBEAT_INTERVAL 

worker = worker_socket(context, poller) 
cycles = 0 
while True: 
    socks = dict(poller.poll(HEARTBEAT_INTERVAL * 1000)) 

    # Handle worker activity on backend 
    if socks.get(worker) == zmq.POLLIN: 
     # Get message 
     # - 3-part envelope + content -> request 
     # - 1-part HEARTBEAT -> heartbeat 
     frames = worker.recv_multipart() 

Go示例代碼也使用了一個輪詢。

我遇到的問題是zeromq.node doesn't seem to use Pollers。節點中的解決方案是僅使用回調消息嗎?我應該如何處理POLLIN狀態?

+0

我的猜測是,你是對的。由於node.js以使用基於事件的操作模型而聞名,因此使用回調來響應消息接收聽起來很自然。事實上,它不是「缺少輪詢」,而是「執行完成」。 –

+0

我懷疑是這樣,但是我在如何在節點中實現'socks = dict(poller.poll(HEARTBEAT_INTERVAL * 1000))'的方法是空白的。我想我只是不需要? – jcollum

回答

1

輪詢器在node.js中是多餘的。這些都只是留言收據的回調。在節點中使用ZMQ需要「傳統」ZMQ方法和體系結構的輕微轉變,因爲所有內置的非阻塞和事件處理策略都被卸載到節點上,節點自然會處理這些東西。