【Related learning recommendations: python tutorial】
ZMQ (hereinafter ZeroMQ referred to as ZMQ) is a simple and easy-to-use transport layer, a socket library like a framework, which makes Socket programming simpler, more concise and higher-performance .
is a message processing queue library that can elastically scale between multiple threads, cores and host boxes. The stated goal of ZMQ is to "become part of the standard network protocol stack and later enter the Linux kernel."
ZMQ makes writing high-performance network applications extremely easy and fun.
ZeroMQ is not a socket encapsulation and cannot be used to implement existing network protocols.
It has its own mode, which is different from the lower-level point-to-point communication mode.
It has a higher level protocol than the tcp protocol. (Of course ZeroMQ is not necessarily based on the TCP protocol, it can also be used for inter-process and intra-process communication)
zeromq is not similar to rabbitmq message queue, it actually Only one message queue component and one library.
| zeromq.org/languages/python/ | |
|---|---|
| github.com/zeromq/pyzmq | |
| zeromq.github.io/pyzmq/ | |
| zguide.zeromq.org/py:all |
1. Request-Reply mode (rep and req)
Messages are bidirectional, coming and going. For messages requested by the req end, the rep end must reply to the req end2. Subscription publishing mode (pub and sub)
Messages are one-way, there is no return. The publishing side can publish messages on specific topics, and the subscribing side can subscribe to topics that it likes. The subscribing side will only receive topics that it has subscribed to. The publisher publishes a message that can be received by multiple subscribers.3. Push pull mode
Messages are one-way, and there is no return. For any push message, only one pull end will receive the message.The subsequent proxy mode and routing mode are all extensions or mutations of the three basic modes. 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'))Server
server.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) 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) 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) 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)The above is the detailed content of Introduction to Pyzmq. For more information, please follow other related articles on the PHP Chinese website!