如何在pyzmq中设置高水位标记以阻止淹水接收者?

时间:2015-05-09 19:10:55

标签: python zeromq pyzmq

我对PyZMQ中的HWM行为感到困惑。我希望以下代码可以阻止

失败示例

In [1]: import zmq
In [2]: context = zmq.Context()

In [3]: alice = context.socket(zmq.ROUTER)
In [4]: alice.set_hwm(1)
In [5]: alice.setsockopt(zmq.RCVHWM, 1)  # just to be sure
In [6]: alice.bind('ipc://alice')

In [7]: bob = context.socket(zmq.DEALER)
In [8]: bob.set_hwm(1)
In [9]: bob.connect('ipc://alice')

In [10]: bob.send(b'123')
In [11]: bob.send(b'123')  # This doesn't block
In [12]: bob.send(b'123')  # This doesn't block
In [13]: bob.send(b'123')  # This doesn't block

要么我不理解HWM,要么我不懂如何在Python中使用它。

问题

当收件人充斥着垃圾时,如何在发件人方面实现阻止?

1 个答案:

答案 0 :(得分:1)

您误解了HWM应该如何工作。 HWM仅影响您设置的套接字的操作。因此,当alice到达HWM时,她会默默地开始dropping messages - 她没有向bob提供任何反馈,因此{{ 1}}继续发送他的消息。

高水位标记的目的是为消息流提供可靠性,它仅 保护套接字免于因耗尽而崩溃记忆如果您需要,可以在应用程序中处理消息可靠性。