安装方法
sudo apt-get install python-zmq
一般使用: 多个客户端,一个服务端,多个客户端可以连接一个服务端发送消息
Request-Reply模式:
消息双向的,有来有往,req端请求的消息,rep端必须答复给req端
客户端在请求后,服务端必须回响应,注意:服务端不返回响应会报错
# 服务端 接收者
import zmq
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")
while True:
message = socket.recv()
print(message)
socket.send("server response!".encode())
# 客户端 发送者
import zmq
import sys
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555")
while(True):
data = input("input your data:")
if data == 'q':
sys.exit()
socket.send(data.encode())
response = socket.recv();
print(response)
订阅模式:一个发布者,多个订阅者
Publish-Subscribe模式:
消息单向的,有去无回
广播所有client,没有队列缓存,断开连接数据将永远丢失。client可以进行数据过滤
# 发布者
import zmq
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://127.0.0.1:5000")
while True:
msg = input('input your data:')
socket.send(msg.encode())
# 订阅者1
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://127.0.0.1:5000")
socket.setsockopt(zmq.SUBSCRIBE,''.encode())
while True:
print(socket.recv())
# 订阅者2
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://127.0.0.1:5000")
socket.setsockopt(zmq.SUBSCRIBE,''.encode())
while True:
print(socket.recv())
平行管道模式
Parallel Pipeline模式:
消息单向的,也是有去无回的。push的任何一个消息,始终只会有一个pull端收到消息
由三部分组成,push进行数据推送,work进行数据缓存,pull进行数据竞争获取处理。区别于Publish-Subscribe存在一个数据缓存和处理负载。
当连接被断开,数据不会丢失,重连后数据继续发送到对端
# pull进行数据竞争获取处理
import zmq
context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.bind('tcp://*:5558')
while True:
data = socket.recv()
print(data)
# work进行数据缓存和转发
import zmq
context = zmq.Context()
recive = context.socket(zmq.PULL)
recive.connect('tcp://127.0.0.1:5557')
sender = context.socket(zmq.PUSH)
sender.connect('tcp://127.0.0.1:5558')
while True:
data = recive.recv()
sender.send(data)
# push进行数据推送
import zmq
context = zmq.Context()
socket = context.socket(zmq.PUSH)
socket.bind('tcp://*:5557')
while True:
data = input('input your data:')
socket.send(data.encode())