Python ZMQ:消息传递库
2 min
不同客户端之间通信
在 ZMQ 中,每个客户端(进程)都需要先加入 ZMQ 的消息系统,然后才能进行通信。对于每个客户端来说,通常需要完成三件事:
- 创建自己的 ZMQ runtime,可以将其理解为一个轻量级的消息通信操作系统1。
- 创建并注册消息端点(socket),声明自己的通信角色
- 接入同一个通信网络(bind/connect)
整个结构可以表示为:
Process
└── Context
└── Socket
└── bind/connect其中:
Context表示当前进程中的 ZMQ runtimeSocket表示一个消息通信端点bind/connect表示将通信端点接入网络
import sys
import zmq
class Server:
def __init__(
self,
address: str = "tcp://localhost:5555"
):
# 【1】创建当前进程中的 ZMQ runtime
self.context = zmq.Context.instance()
# 【2】创建一个 Reply 类型的消息端点
self.socket = self.context.socket(zmq.REP)
# 【3】绑定到网络地址,对外提供服务
self.socket.bind(address)
def run(self):
while True:
try:
# 接收客户端消息
message = self.socket.recv()
print(f"recv: {message}")
# 回复客户端
self.socket.send(b"ok")
except KeyboardInterrupt:
sys.exit(0)