【Verwandte Lernempfehlungen: Python-Tutorial】
ZMQ (im Folgenden als ZeroMQ abgekürzt als ZMQ) ist eine einfache und benutzerfreundliche Transportebene , ein socket wie eine Framework-Bibliothek, was die Socket-Programmierung einfacher, prägnanter und leistungsfähiger macht.
ist eine Warteschlangenbibliothek für die Nachrichtenverarbeitung, die sich flexibel über mehrere Threads, Kerne und Host-Boxen hinweg skalieren lässt. Das erklärte Ziel von ZMQ ist es, „Teil des Standard-Netzwerkprotokoll-Stacks zu werden und später in den Linux-Kernel einzusteigen“.
ZMQ macht das Schreiben leistungsstarker Netzwerkanwendungen extrem einfach und macht Spaß.
ZeroMQ ist keine Socket-Kapselung und kann nicht zur Implementierung vorhandener Netzwerkprotokolle verwendet werden.
Es verfügt über einen eigenen Modus, der sich vom Punkt-zu-Punkt-Kommunikationsmodus auf niedrigerer Ebene unterscheidet.
Es verfügt über ein Protokoll höherer Ebene als das TCP-Protokoll. (Natürlich basiert ZeroMQ nicht unbedingt auf dem TCP-Protokoll, es kann auch für die prozessübergreifende und prozessinterne Kommunikation verwendet werden.)
zeromq
并不是类似rabbitmq
Nachrichtenwarteschlange, es handelt sich eigentlich nur um eine Nachrichtenwarteschlangenkomponente und eine Bibliothek. Offizielle Website von Pyzmq:
zeromq.github.io / pyzmq/
zguide.zeromq.org/py:all | |
---|---|
pip install pyzmq | |
1. Antwortmodus ( Anfrage-Antwort) (Rep und Req) | |
Nachrichten antworten sind Einwegartikel. Ja, es gibt keine Rückgabe. Die veröffentlichende Seite kann Nachrichten zu bestimmten Themen veröffentlichen und die abonnierende Seite kann Themen abonnieren, die ihr gefallen. Die abonnierende Seite erhält nur Themen, die sie abonniert hat. Der Herausgeber veröffentlicht eine Nachricht, die von mehreren Abonnenten empfangen werden kann. |
Der nachfolgende Proxy-Modus und der Routing-Modus sind allesamt Erweiterungen oder Mutationen der drei Grundmodi.
Nachdem der Client eine Anfrage gestellt hat, muss der Server antworten. Der Client initiiert die Anfrage und wartet darauf, dass der Server auf die Anfrage antwortet. Auf der Clientseite muss es ein Sende- und Empfangspaar geben.
Auf der Serverseite hingegen muss es ein Sende- und Empfangspaar geben. Sowohl der Server als auch der Client können im 1:N-Modell sein. Normalerweise wird 1 als Server und N als Client betrachtet.
ZMQ kann die Routing-Funktion sehr gut unterstützen (die Komponente, die die Routing-Funktion implementiert, heißt Gerät) und 1:N bis N:M erweitern (es müssen nur wenige Routing-Knoten hinzugefügt werden). Bei diesem Modell ist die Endpunktadresse der unteren Ebene vor der oberen Ebene verborgen. Die Antwortadresse ist in jeder Anfrage implizit enthalten und die Anwendung kümmert sich nicht darum -Abonnementmodus (Publish-Subscribe-Modell):
Übertragung an alle Clients, es gibt keinen Warteschlangen-Cache und getrennte Daten gehen für immer verloren. Der Client kann eine Datenfilterung durchführen.
Server
server.py
import zmq import sys context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://*:5555") while True: try: print("wait for client ...") message = socket.recv() print("message from client:", message.decode('utf-8')) socket.send(message) except Exception as e: print('异常:',e) sys.exit()
Client1
import zmq import sys context = zmq.Context() print("Connecting to server...") socket = context.socket(zmq.REQ) socket.connect("tcp://localhost:5555") while True: input1 = input("请输入内容:").strip() if input1 == 'b': sys.exit() socket.send(input1.encode('utf-8')) message = socket.recv() print("Received reply: ", message.decode('utf-8'))
client2.py
import zmq import time import sys context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind("tcp://*:5555") while True: msg = input("请输入要发布的信息:").strip() if msg == 'b': sys.exit() socket.send(msg.encode('utf-8')) time.sleep(1)
3. Paralleler Pipeline-Modus (Pipeline-Modell):
Es besteht aus drei Teilen : Push für Daten-Push, Arbeit für Daten-Caching und Pull für Datenwettbewerbserfassungsverarbeitung. Anders als bei Publish-Subscribe gibt es einen Datencache und eine Verarbeitungslast.
Wenn die Verbindung getrennt wird, gehen die Daten nicht verloren und die Daten werden nach der erneuten Verbindung weiterhin an den Peer gesendet.
server.py
import zmq context = zmq.Context() socket = context.socket(zmq.SUB) socket.connect("tcp://localhost:5555") socket.setsockopt(zmq.SUBSCRIBE,''.encode('utf-8')) # 接收所有消息 while True: response = socket.recv().decode('utf-8'); print("response: %s" % response)
import zmq context = zmq.Context() socket = context.socket(zmq.SUB) socket.connect("tcp://localhost:5555") socket.setsockopt(zmq.SUBSCRIBE,'123'.encode('utf-8')) # 消息过滤 只接受123开头的信息 while True: response = socket.recv().decode('utf-8'); print("response: %s" % response)
import zmq import time context = zmq.Context() socket = context.socket(zmq.PUSH) socket.bind("tcp://*:5557") while True: msg = input("请输入要发布的信息:").strip() socket.send(msg.encode('utf-8')) print("已发送") time.sleep(1)
Das obige ist der detaillierte Inhalt vonEinführung in Pyzmq. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!