我正在使用由ZeroMQ 4.1.6支持的PyZMQ 16.0.4,并试图更好地理解套接字选项INVERT_MATCHING。
我在repl中尝试过以下内容:
>>>导入zmq>>> …
.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 )
颠倒过滤行为 的 PUB-SUB 强> 套接字,设置为1时。 上 的 PUB 强> 和 的 XPUB 强> 套接字,这会导致消息被发送到所有连接的套接字,除了那些订阅了与消息匹配的前缀的套接字。上 的 SUB 强> 套接字,这只会导致用户只接收与任何套接字订阅不匹配的传入消息。 的 每当 ZMQ_INVERT_MATCHING 在a上设置为1 PUB 套接字,全部 SUB 连接到它的套接字也必须将选项设置为1.如果不这样做,将具有 SUB 套接字拒绝一切 PUB socket发送它们 强> 。 的 XSUB 强> 套接字不需要这样做,因为它们不会过滤传入的消息。
颠倒过滤行为 的 PUB-SUB 强> 套接字,设置为1时。
PUB-SUB
上 的 PUB 强> 和 的 XPUB 强> 套接字,这会导致消息被发送到所有连接的套接字,除了那些订阅了与消息匹配的前缀的套接字。上 的 SUB 强> 套接字,这只会导致用户只接收与任何套接字订阅不匹配的传入消息。 的 每当 ZMQ_INVERT_MATCHING 在a上设置为1 PUB 套接字,全部 SUB 连接到它的套接字也必须将选项设置为1.如果不这样做,将具有 SUB 套接字拒绝一切 PUB socket发送它们 强> 。 的 XSUB 强> 套接字不需要这样做,因为它们不会过滤传入的消息。
PUB
XPUB
SUB
ZMQ_INVERT_MATCHING
XSUB
ZeroMQ 的 PUB 强> -sockets只支持反转匹配 版本4.2 。您需要更新ZeroMQ。
请注意,PyZMQ捆绑了预编译的ZeroMQ 4.1.6。因此,根据您安装PyZMQ的方式,您可能实际上并未使用系统的ZeroMQ。
尝试以下操作重新安装PyZMQ并强制重新编译ZeroMQ后端。
$ pip install pyzmq --ignore-installed --no-use-wheel