Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in Pyzmq

Einführung in Pyzmq

coldplay.xixi
coldplay.xixinach vorne
2020-09-02 17:19:4135199Durchsuche

【Verwandte Lernempfehlungen: Python-Tutorial

Einführung in Pyzmq

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 并不是类似rabbitmqNachrichtenwarteschlange, es handelt sich eigentlich nur um eine Nachrichtenwarteschlangenkomponente und eine Bibliothek. Offizielle Website von Pyzmq:

Docs


zeromq.github.io / pyzmq/

Guidezguide.zeromq.org/py:allDownload Mehrere Modi von Pyzmq1. Antwortmodus ( Anfrage-Antwort) (Rep und Req) Nachrichten sind bidirektional, kommen und gehen. Für Nachrichten, die von der Req-Seite angefordert werden, muss der Repräsentant auf den Abonnement-Veröffentlichungsmodus (Pub und Sub) 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. 3. Push-Pull-Modus
pip install pyzmq

Nachrichten sind unidirektional und es gibt kein Zurück. Für jede gepushte Nachricht empfängt nur ein Pull-Ende die Nachricht.

Der nachfolgende Proxy-Modus und der Routing-Modus sind allesamt Erweiterungen oder Mutationen der drei Grundmodi.

1. Anfrage-Antwort-Modus (Anfrage-Antwort-Modell):

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

client1.py
 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

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)

worker.py
 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)
client.py

 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen