Maison > Article > développement back-end > Introduction à Pyzmq
[Recommandations d'apprentissage associées : tutoriel Python]
ZMQ (ci-après ZeroMQ appelé ZMQ) est une couche de transport simple et facile à utiliser, une bibliothèque de sockets comme un framework, qui simplifie la programmation Socket, plus concis et plus performant.
est une bibliothèque de files d'attente de traitement de messages qui évolue de manière élastique sur plusieurs threads, cœurs et boîtes hôtes. L'objectif déclaré de ZMQ est de « faire partie de la pile de protocoles réseau standard et d'entrer plus tard dans le noyau Linux ».
ZMQ rend l'écriture d'applications réseau hautes performances extrêmement simple et amusante.
ZeroMQ n'est pas une encapsulation de socket et ne peut pas être utilisé pour implémenter des protocoles réseau existants.
Il a son propre mode, qui est différent du mode de communication point à point de niveau inférieur.
Il a un protocole de niveau supérieur au protocole TCP. (Bien sûr, ZeroMQ n'est pas nécessairement basé sur le protocole TCP, il peut également être utilisé pour la communication inter-processus et intra-processus)
zeromq
n'est pas similaire à la file d'attente de messages rabbitmq
, c'est en fait, juste un composant de file d'attente de messages et une bibliothèque.
Pyzmq官网: | zeromq.org/languages/python/ |
---|---|
Github | github.com/zeromq/pyzmq |
Docs | zeromq.github.io/pyzmq/ |
Guide | zguide.zeromq.org/py:all |
pip install pyzmq
1. Demande-Réponse (rep et req)
Les messages sont bidirectionnels, entrants et sortants. Pour les messages demandés par le côté req, le côté req doit répondre au côté req. >
2. Modèle de publication par abonnement (pub et sub)
Les messages sont à sens unique, il n'y a pas de retour. Le côté publication peut publier des messages sur des sujets spécifiques, et le côté abonné peut s'abonner aux sujets qu'il aime. Le côté abonné ne recevra que les sujets auxquels il est abonné. L'éditeur publie un message qui peut être reçu par plusieurs abonnés.3. Mode push pull
Les messages sont à sens unique et il n'y a pas de retour. Pour tout message poussé, une seule extrémité d'extraction recevra le message.Le mode proxy et le mode de routage suivants sont tous des extensions ou des mutations des trois modes de base.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()
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'))
Serveur
server.pyimport 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)Client1client1.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)Client Terminal 2client2.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)
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)worker.py
import zmq context = zmq.Context() receive = context.socket(zmq.PULL) receive.connect('tcp://127.0.0.1:5557') sender = context.socket(zmq.PUSH) sender.connect('tcp://127.0.0.1:5558') while True: data = receive.recv() print("正在转发...") sender.send(data)client.py
import zmq context = zmq.Context() socket = context.socket(zmq.PULL) socket.bind("tcp://*:5558") while True: response = socket.recv().decode('utf-8') print("response: %s" % response)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!