2

私はある種の分散制御システムを持っており、毎秒ハートビートを送信しています。受信側では、メッセージが 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')
4

1 に答える 1

2

ブロッキング recv の代わりに ZMQ ソケットで poll を使用します。ZeroMQ ガイドには、この例がたくさんあります。

于 2013-03-21T14:09:15.053 に答える