我该如何在Node.js中处理ZMQ的轮询?

2 投票
1 回答
721 浏览
提问于 2025-04-18 14:08

我正在用node.js构建一个“偏执海盗”的项目。最开始我用了一些python代码:

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语言的示例代码也用了一个叫Poller的东西。

我遇到的问题是,zeromq.node似乎不支持Pollers。在node里,解决这个问题的方法是直接在消息上使用回调吗?我应该怎么处理POLLIN状态呢?

1 个回答

2

在node.js中,轮询器是多余的。其实就是在收到消息时调用回调函数。要在node中使用ZMQ,你需要稍微调整一下“传统”的ZMQ方法和架构,因为node会自然处理所有内置的非阻塞和事件处理策略。

撰写回答