Ich verwende ZeroMQ, um eine Publish/Subscribe-Umgebung zu ermöglichen, die ich brauche. Ich benutze einen Publish Server auf Computer A mit Python (mit EventLoop), und jetzt habe ich einen Teilnehmer in C++ auf Rechner B und einen zweiten Teilnehmer in Python (mit EventLoop) auf Rechner C.ZeroMQ PUB/SUB - Warum funktionieren nicht mehrere Abonnenten?
If Maschine B abonniert Maschine A vor Maschine C, dann erhält B abonnierte Nachrichten und C nicht. Wenn ich mir die aufgebauten Verbindungen auf Maschine A anschaue, gibt es außerdem nur eine Verbindung für Maschine B, aber nicht für C. Wenn Maschine C A vor B abonniert, dann ist es umgekehrt.
Hier ist mein Verleger Code:
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()
Hier ist mein Python Teilnehmercode:
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()
Warum ist nicht mein Verleger mehrere eingehende Teilnehmerbuchsen akzeptieren? Es ist wahrscheinlich erwähnenswert, dass mehrere Abonnenten einwandfrei funktionieren, wenn Sie sie auf Computer A ausführen, aber ich glaube nicht, dass es sich um ein Firewall-Problem handelt, da ich Teilnehmerverbindungen von B und C mit deaktivierter Firewall getestet habe.
jede Chance, dass Sie Ihre Abonnentencodes (oder beide) veröffentlichen können? – g19fanatic
@ g19fanatic - sicher, ich habe meine ursprüngliche Frage bearbeitet, um den Code für meinen Python-Abonnenten einzuschließen. Ich habe momentan keinen Zugriff auf den C++ - Teilnehmer, aber ich habe bestätigt, dass ich das gleiche Ergebnis erhalte, wenn der Python-Teilnehmer auf beiden Rechnern B und C läuft (was bedeutet, dass einer der Teilnehmer in C++ geschrieben ist) scheint nicht relevant zu sein, daher hätte ich die Frage wahrscheinlich nicht mit dieser Unterscheidung verkomplizieren sollen. – Bryan
Sehr seltsam. Können Sie den Code mit Publisher auf B und dann auf C mit Abonnenten auf anderen Knoten testen? Sieht so aus, als gäbe es ein Netzwerkproblem. – mechmind