2012-12-16 16 views
12

में ज़ीरोएमक्यू और एकाधिक सब्सक्राइब फ़िल्टर मैं एक सॉकेट का उपयोग करके पाइथन में ज़ीरोएमक्यू के साथ कई फ़िल्टरों की सदस्यता लेना चाहता हूं।पाइथन

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

लेकिन यह काम नहीं करता है। केवल पहला खाता ध्यान में रखा जाता है।

हालांकि मैंने इसे zeromq site पर पढ़ा है: "एकाधिक ZMQ_SUB सॉकेट से एकाधिक फ़िल्टर संलग्न किए जा सकते हैं, इस मामले में यदि यह कम से कम एक फ़िल्टर से मेल खाता है तो एक संदेश स्वीकार किया जाएगा।"

मैं zmq 2.2.0.1

उपयोग कर रहा हूँ तो मुझे आश्चर्य है कि कैसे करना है। । । कोई विचार?

उत्तर

21

यह काम करता है:

alpha 
beta 
apple 
bagel 

तो दोनों सदस्यता काम करते हैं:

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) 

उत्पादन देता है। आपका सटीक कोड क्या है? क्योंकि शायद यह एक और मुद्दा है।

+0

हाय, आपके उत्तर के लिए धन्यवाद। वास्तव में यह काम करता है, मेरे मामले में मैं प्रकाशक और ग्राहक के बीच एक फॉरवर्डर डिवाइस का उपयोग कर रहा हूं। इसे अक्षम करने से चीजें काम करती हैं ... अभी भी जांच कर रही है कि फॉरवर्डर डिवाइस एकाधिक फ़िल्टर होने से क्यों रोकता है ... – Marc

+0

ठीक है, मैं खुद को जवाब देता हूं कि मेरा कोड थोड़ा जटिल है और मैं कहीं गड़बड़ कर रहा हूं। पूरी तरह से काम करता है, धन्यवाद! – Marc