ZeroMQ和Python中的多个订阅过滤器

时间:2012-12-16 19:14:15

标签: python sockets zeromq

我想使用一个套接字在Python中订阅使用ZeroMQ的多个过滤器。

sock.setsockopt(zmq.SUBSCRIBE, 'first.filter')
sock.setsockopt(zmq.SUBSCRIBE, 'second.filter')

但这不起作用。只考虑第一个。但是,我在zeromq site上看到了这一点:

  

多个过滤器可以附加到单个ZMQ_SUB套接字,在这种情况下,如果消息与至少一个过滤器匹配,则应接受该消息。

我正在使用zmq 2.2.0.1。所以,我想知道该怎么做。有什么想法吗?

1 个答案:

答案 0 :(得分:26)

这有效:

import time
import zmq

ctx = zmq.Context()
pub = ctx.socket(zmq.PUB)
sub = ctx.socket(zmq.SUB)

url = "tcp://127.0.0.1:5555"
pub.bind(url)
sub.connect(url)

# subscribe to 'a' and 'b'
sub.setsockopt(zmq.SUBSCRIBE, b'a')
sub.setsockopt(zmq.SUBSCRIBE, b'b')

time.sleep(1)

for word in [ 'alpha', 'beta', 'gamma', 'apple', 'carrot', 'bagel']:
    pub.send(word)

time.sleep(1)

for i in range(4):
    print sub.recv(zmq.NOBLOCK)

给出输出:

alpha
beta
apple
bagel

所以这两个订阅都有效。你的确切代码是什么?因为这可能是另一个问题。