我正在使用由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中的错误吗?
或者我是否需要做一些不同的事情才能设置此选项?
答案 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 )
设置为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