2012-12-16 20 views
12

Tek bir soket kullanarak Python'da ZeroMQ ile birden çok filtreye abone olmak istiyorum.ZeroMQ ve Python'da çoklu abone filtreleri

Ancak bu çalışmaz. Sadece ilk hesapta dikkate alınır.

Ancak, bunu zeromq site numaralı sayfada okudum: "Birden çok filtre tek bir ZMQ_SUB soketine bağlanabilir, bu durumda en az bir filtreyle eşleşmesi durumunda bir mesaj kabul edilir." Bunun nasıl yapılacağını ben

zmq 2.2.0.1 kullanıyorum

Yani merak ediyorum. . . herhangi bir fikir?

cevap

21

Bu çalışır:

alpha 
beta 
apple 
bagel 

Yani her iki abonelikleri işi yaparken

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) 

çıkış verir. Tam kodun nedir? Çünkü belki başka bir sorun.

+0

Merhaba, cevabınız için teşekkürler. Aslında bu çalışır, benim durumumda yayıncı ve abone arasında bir forwarder cihazı kullanıyorum. Devre dışı bırakma, bazı şeyleri çalışır hale getiriyor ... hala iletici aygıtın birden fazla filtreye sahip olmasını neden engellediğini araştırıyor ... – Marc

+0

Tamam, kendime yanıt vermem kodum biraz karmaşık ve bir yere bulaştım. Şimdi mükemmel çalışıyor, teşekkürler! – Marc