2012-12-16 17 views
12

Chciałbym zasubskrybować wiele filtrów za pomocą ZeroMQ w Pythonie, używając jednego gniazda.ZeroMQ i wiele filtrów subskrypcji w Pythonie

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

Ale to nie działa. Tylko pierwszy jest brany pod uwagę.

Jednak przeczytałem to na zeromq site: "Do jednego gniazda ZMQ_SUB można podłączyć wiele filtrów, w takim przypadku wiadomość zostanie zaakceptowana, jeśli pasuje do co najmniej jednego filtra."

Używam zmq 2.2.0.1

Więc zastanawiam się, jak to zrobić. . . jakieś pomysły?

Odpowiedz

21

to działa:

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) 

daje wynik:

alpha 
beta 
apple 
bagel 

Więc oba zapisy działają. Jaki jest twój dokładny kod? Ponieważ może to inny problem.

+0

Witam, dziękuję za odpowiedź. Rzeczywiście działa to, w moim przypadku używam urządzenia przesyłania dalej między wydawcy i subskrybenta. Wyłączenie go sprawia, że ​​wszystko działa ... wciąż sprawdzam, dlaczego urządzenie forwardera uniemożliwia posiadanie wielu filtrów ... – Marc

+0

OK Odpowiadam sobie, że mój kod jest trochę skomplikowany i gdzieś zawiedliśmy. Działa teraz idealnie, dzięki! – Marc

Powiązane problemy