2012-10-22 6 views
8

मैं ज़ीरोएमक्यू का उपयोग कर रहा हूं ताकि मुझे प्रकाशित/सब्सक्राइब करने वाले पर्यावरण की सुविधा मिल सके। मैं मशीन ए पर पाइथन (इवेंट लूप का उपयोग करके) पर एक प्रकाशित सर्वर चला रहा हूं, और अभी मेरे पास मशीन बी पर सी ++ में चलने वाला एक ग्राहक है और मशीन सी परज़ीरोएमक्यू पब/एसयूबी - एकाधिक ग्राहक क्यों काम नहीं करेंगे?

पर एक दूसरा ग्राहक पाइथन (इवेंट लूप का उपयोग कर) में चल रहा दूसरा ग्राहक है। मशीन बी मशीन की सदस्यता लेता है मशीन सी से पहले ए, फिर बी सब्स्क्राइब किए गए संदेश प्राप्त करता है और सी नहीं करता है। इसके अलावा, अगर मैं मशीन ए पर स्थापित कनेक्शन देखता हूं, तो केवल मशीन बी के लिए कनेक्शन मौजूद है लेकिन सी के लिए नहीं। यदि मशीन सी बी से पहले ए की सदस्यता लेती है, तो यह दूसरी तरफ है।

यहाँ मेरी प्रकाशक कोड है:

import zmq 
from zmq.eventloop import ioloop, zmqstream 

ioloop.install() 

context = zmq.Context(1) 
socket = context.socket(zmq.PUB) 
publisher = zmqstream.ZMQStream(socket) 
socket.bind("tcp://*:1337") 

def publish(): 
    publisher.send_multipart(("heartbeat", "OHAI")) 

ioloop.PeriodicCallback(publish, 5000).start() 
ioloop.IOLoop.instance().start() 

यहाँ मेरी अजगर ग्राहक कोड है:

import zmq 
from zmq.eventloop import ioloop, zmqstream 

ioloop.install() 

context = zmq.Context(1) 
socket  = context.socket(zmq.SUB) 
subscriber = zmqstream.ZMQStream(socket) 
socket.setsockopt(zmq.SUBSCRIBE, "heartbeat") 
socket.connect("tcp://pub.local:1337") 

def subscription(message): 
    print "Message Received: %s" % (message[1]) 

subscriber.on_recv(subscription) 
ioloop.IOLoop.instance().start() 

क्यों मेरे प्रकाशक कई भेजे ग्राहक सॉकेट स्वीकार नहीं कर रहा है? यह शायद यह ध्यान देने योग्य है कि मशीन ए पर चलते समय कई ग्राहक ठीक काम करते हैं, लेकिन मुझे नहीं लगता कि यह फ़ायरवॉल मुद्दा है क्योंकि मैंने बी और सी से ए को फ़ायरवॉल अक्षम के साथ ग्राहक कनेक्शन का परीक्षण किया था।

+0

कोई भी मौका आप अपने ग्राहक कोड के या तो (या दोनों) प्रकाशित कर सकते हैं? – g19fanatic

+0

@ g19fanatic - निश्चित रूप से, मैंने अपने मूल प्रश्न को मेरे पायथन ग्राहक के लिए कोड शामिल करने के लिए संपादित किया है। मेरे पास अभी सी ++ ग्राहक तक पहुंच नहीं है, लेकिन मैंने पुष्टि की है कि मुझे एक ही परिणाम मिलते हैं यदि पाइथन ग्राहक मशीन बी और सी दोनों पर चल रहा है (यानी, तथ्य यह है कि सब्सक्राइबरों में से एक सी ++ में लिखा गया है प्रतीत नहीं होता है इसलिए मुझे उस भेद को बनाकर सवाल जटिल नहीं होना चाहिए था)। – Bryan

+0

बहुत अजीब। क्या आप अन्य नोड्स पर ग्राहकों के साथ बी पर प्रकाशक के साथ कोड और फिर सी पर कोड का परीक्षण कर सकते हैं? ऐसा लगता है कि नेटवर्क समस्या है। – mechmind

उत्तर

5

मूल पोस्टिंग में सभी सहायक टिप्पणियों के लिए सभी को धन्यवाद। ज़ीरोएमक्यू संस्करणों में इस्तेमाल होने के कारण यह व्यवहार सामने आया ... मेरे हिस्से पर एक निरीक्षण।

संबंधित मुद्दे