如果 ZeroMQ 不接收消息,如何处理?

2 投票
1 回答
901 浏览
提问于 2025-04-17 19:53

我有一个分布式控制系统,每秒钟会发送一个心跳信号。在接收端,如果超过2秒没有收到消息,我需要采取一些行动。问题是,当zeroMQ在等待回复时,我无法做其他事情,比如检查自上次收到消息以来已经过去了多少时间。

我现在的代码如下。有没有人知道如果超过2秒没有收到消息,我该如何采取行动?欢迎任何建议!

[编辑] 在Pieter Hintjes的建议下,我在代码中添加了轮询,但仍然不行。还有其他想法吗?

from datetime import datetime
import zmq
context = zmq.Context()

# Set up subscriber connection to receive message from broker
subscriber = context.socket(zmq.SUB)
subscriber.connect('tcp://localhost:8888')
subscriber.setsockopt(zmq.SUBSCRIBE, 'beat')

# Initialise poll set
poller = zmq.Poller()
poller.register(subscriber, zmq.POLLIN)

while True:
    socks = dict(poller.poll(2000))
    if subscriber in socks and socks[subscriber] == zmq.POLLIN:
        message = subscriber.recv()
        print(message)

    print('do other stuff')

1 个回答

2

在ZMQ套接字上使用轮询(poll),而不是阻塞的接收(recv)。在ZeroMQ指南中有很多这方面的例子。

撰写回答