2012-12-16 11 views
12

我想用Python中的ZeroMQ訂閱多個過濾器,使用一個套接字。Python中的ZeroMQ和多個訂閱過濾器

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

但這不起作用。只考慮第一個。

但是我在zeromq site上看到:「多個過濾器可能連接到一個ZMQ_SUB套接字,在這種情況下,如果消息至少匹配一個過濾器,則應該接受該消息。」

我使用ZMQ 2.2.0.1

所以我不知道該怎麼做。 。 。有任何想法嗎?

回答

21

這工作:

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 

因此,無論訂閱做的工作。你的確切代碼是什麼?因爲也許這是另一個問題。

+0

嗨,謝謝你的回答。事實上,這是有效的,在我的情況下,我在發佈者和訂閱者之間使用轉發器設備。禁用它使事情工作...仍然在調查爲什麼轉發器設備防止有多個過濾器... – Marc

+0

好吧我回復自己我的代碼有點複雜,我搞砸了某個地方。完美的工作,謝謝! – Marc