我目前使用ZeroMQ和Java绑定。我的程序处于PUB/SUB
模式。
设置超时似乎是合理的,而客户端无法从PUB
方收到消息。
但对于没有固定频率发送邮件的发布服务器,很难确定合理的超时。
另一方面,如果没有设置超时,那么程序可能会停留在功能:
recv()
永远甚至发布服务器已经死了。
如果有解决此问题的良好解决方案?
答案 0 :(得分:1)
您可以使用Pollers:
poller = zmq.Poller()
poller.register(client_receiver, zmq.POLLIN);
进一步阅读: http://learning-0mq-with-pyzmq.readthedocs.io/en/latest/pyzmq/multisocket/zmqpoller.html
希望它有所帮助。答案 1 :(得分:1)
一个主要的最佳解决方案是使用 Poller
实例,.poll()
方法告诉您的代码,再次借助明确可配置的{{1}在[ms]中,是否有任何传入消息要么尝试非阻塞aTimeOut
方法,要么甚至不尝试这样做,一旦有任何此类消息的NACK从调用{{{ 1}}方法(详情请查看API)。
另一种方法是使用非阻塞模式调用.recv()
方法。这里,API +包装器/绑定,指定它如何处理状态,其中没有这样的消息在本地准备好获得.poll()
- ed,因此可以依赖于公共语言的可用语法 - 脚手架 - 如{{ 1}}或.recv( aSockINST, ZMQ_DONTWAIT )
或.recv()
- 处理{ try: except: finally: }
调用中的任一返回状态。类似的规则适用于(几乎)阻塞调用,有一些中等小{ try: catch: }
超时。