关于ZeroMQ 三种模式python3实现方式
ZeroMQ是一个消息队列网络库,实现网络常用技术封装。在C/S中实现了三种模式,这段时间用python简单实现了一下,感觉python虽然灵活。但是数据处理不如C++自由灵活。
Request-Reply模式:
客户端在请求后,服务端必须回响应
server:
#-*-coding:utf-8-*- importzmq context=zmq.Context() socket=context.socket(zmq.REP) socket.bind("tcp://*:5555") whileTrue: message=socket.recv() print(message) socket.send("serverresponse!".encode('utf-8'))
clinet:
#-*-coding:utf-8-*- importzmq importsys context=zmq.Context() socket=context.socket(zmq.REQ) socket.connect("tcp://localhost:5555") while(True): data=input("inputyourdata:") ifdata=='q': sys.exit() print(data) socket.send(data.encode('utf-8')) response=socket.recv(); print(response)
Publish-Subscribe模式:
广播所有client,没有队列缓存,断开连接数据将永远丢失。client可以进行数据过滤。
server:
#-*-coding:utf-8-*- importzmq context=zmq.Context() socket=context.socket(zmq.PUB) socket.bind("tcp://127.0.0.1:5000") whileTrue: data=input('inputyourdata:') socket.send(data.encode('utf-8'))
clinet:
#-*-coding:utf-8-*- importtime importzmq context=zmq.Context() socket=context.socket(zmq.SUB) socket.connect("tcp://127.0.0.1:5000") socket.setsockopt(zmq.SUBSCRIBE,''.encode('utf-8')) whileTrue: print(socket.recv())
ParallelPipeline模式:
由三部分组成,push进行数据推送,work进行数据缓存,pull进行数据竞争获取处理。区别于Publish-Subscribe存在一个数据缓存和处理负载。
当连接被断开,数据不会丢失,重连后数据继续发送到对端
server:
#-*-coding:utf-8-*- importzmq context=zmq.Context() recive=context.socket(zmq.PULL) recive.connect('tcp://127.0.0.1:5558') whileTrue: data=recive.recv() print(data)
work:
#-*-coding:utf-8-*- importzmq 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') whileTrue: data=recive.recv() print(data) sender.send(data)
clinet:
#-*-coding:utf-8-*- importzmq importtime context=zmq.Context() socket=context.socket(zmq.PUSH) socket.bind('tcp://*:5557') whileTrue: data=input('inputyourdata:') print(data) socket.send(data.encode('utf-8'))
以上这篇关于ZeroMQ三种模式python3实现方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。