如何使用PyZMQ在ZeroMQ PUB套接字上设置INVERT_MATCHING?

时间:2018-03-13 23:20:34

标签: zeromq distributed-system pyzmq

我正在使用由ZeroMQ 4.1.6支持的PyZMQ 16.0.4,并尝试更好地了解套接字选项 INVERT_MATCHING

我在repl中尝试了以下内容:

>>> import zmq
>>> context = zmq.Context.instance()
>>> pubsock = context.socket(zmq.PUB)
>>> pubsock.INVERT_MATCHING = 1

最后一行给我一个错误

  

AttributeError: Socket has no such option: INVERT_MATCHING

我刚看到PyZMQ中的错误吗?

或者我是否需要做一些不同的事情才能设置此选项?

2 个答案:

答案 0 :(得分:-1)

我们走吧:使用.setsockopt()

print( "ZeroMQ version ought be 4.2+ ... Hope it is... " )
print( zmq.version() )
print( pubsock.setsockopt.__doc__ )
pass;  pubsock.setsockopt( zmq.INVERT_MATCHING, 1 )

Plus最好重新阅读文档:

  

设置为1时,撤消 PUB-SUB 套接字的过滤行为。

     

PUB XPUB 套接字上,这会将邮件发送到所有已连接的套接字,但订阅了与之匹配的前缀的订阅者除外信息。在 SUB 套接字上,这会导致只有用户才能接收与任何套接字订阅不匹配的传入消息。

  每当ZMQ_INVERT_MATCHING套接字上的PUB设置为1时,连接到它的所有SUB套接字也必须将选项设置为1.如果不这样做,则会SUB 1}}套接字拒绝PUB套接字发送它们的所有内容

XSUB 套接字不需要执行此操作,因为它们执行此操作不过滤传入的消息。

答案 1 :(得分:-1)

ZeroMQ PUB -sockets仅支持自version 4.2以来的反向匹配。您需要更新ZeroMQ。

请注意,PyZMQ捆绑了预编译的ZeroMQ 4.1.6。因此,根据您安装PyZMQ的方式,您可能实际上并未使用系统的ZeroMQ。

尝试以下操作重新安装PyZMQ并强制重新编译ZeroMQ后端。

$ pip install pyzmq --ignore-installed --no-use-wheel