我对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中使用它。
当收件人充斥着垃圾时,如何在发件人方面实现阻止?
答案 0 :(得分:1)
您误解了HWM应该如何工作。 HWM仅影响您设置的套接字的操作。因此,当alice
到达HWM时,她会默默地开始dropping messages - 她没有向bob
提供任何反馈,因此{{ 1}}继续发送他的消息。
高水位标记的目的是不为消息流提供可靠性,它仅 保护套接字免于因耗尽而崩溃记忆如果您需要,可以在应用程序中处理消息可靠性。