Ich versuche, die dynamische Erkennung von vernetzten "Knoten" mithilfe des XPUB-XSUB-Musters von ZMQ zu implementieren. Jedes Beispiel, das ich online finden kann, ist auf einen einzelnen Computer beschränkt - unter Verwendung von Localhost für die IP -Adresse. Wenn ich sie über mehr als einen Computer implementiere, scheint nichts zu passieren.import zmq
if __name__ == "__main__":
context = zmq.Context()
# Socket facing producers
frontend = context.socket(zmq.XPUB)
frontend.bind("tcp://*:5559")
# Socket facing consumers
backend = context.socket(zmq.XSUB)
backend.bind("tcp://*:5560")
zmq.proxy(frontend, backend)
# We never get here…
frontend.close()
backend.close()
context.term()
< /code>
(Zpub.py)
import zmq, time
def getNetworkIp():
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.connect(('
', 12345))
return s.getsockname()[0]
if __name__ == "__main__":
context = zmq.Context()
s = context.socket(zmq.PUB)
s.connect("tcp://{}:5560".format(getNetworkIp()))
while True:
time.sleep(2)
t = time.strftime('%H:%M:%S')
s.send_string('Time:' + t)
print('sent {}'.format(t))
context.term()
< /code>
(zsub.py)
import zmq
def getNetworkIp():
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.connect(('
', 12345))
return s.getsockname()[0]
if __name__ == "__main__":
context = zmq.Context()
subscriber = context.socket(zmq.SUB)
subscriber.connect("tcp://{}:5559".format(getNetworkIp()))
subscriber.setsockopt_string(zmq.SUBSCRIBE, "")
while True:
if subscriber.poll(1000, zmq.POLLIN):
message = subscriber.recv()
print('{}'.format(message))
context.term()
< /code>
Wenn ich alle drei Skripte auf einer Maschine ausführe, funktionieren sie natürlich alle und erhalte die Ausgabe des Abonnentendrucks. Wenn ich jedoch die Skripte zproxy.py und zpub.py auf einer Maschine und zsub.py auf einer anderen Maschine (mit dem ich aus der Ferne verbunden bin und Ping kann) ausführe, druckt der Abonnent nie etwas. Versuch, das Skript von ZProxy.py auf der zweiten Maschine auszuführen (gefolgt vom Skript von Zsub.py) auch fehl>
Dynamische Entdeckung von ZMQ mit XPUB-XSUB ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post