【相干学习保举:python教程】
Pyzmq引见
ZMQ (如下 ZeroMQ 简称 ZMQ)是一个简略好用的传输层,像框架同样的一个 socket library,他使患上 Socket 编程愈加简略、简约以及功能更高。
是一个音讯解决行列步队库,可正在多个线程、内核以及主机盒之间弹性伸缩。ZMQ 的明白指标是“成为规范网络协定栈的一局部,之落后入 Linux 内核”。
ZMQ 让编写高功能网络使用顺序极为简略以及风趣。
ZeroMQ并非一个对socket的封装,不克不及用它去完成已有的网络协定。
它有本人的模式,没有同于更底层的点对点通信模式。
它有比tcp协定更高一级的协定。(当然ZeroMQ纷歧定基于TCP协定,它也能够用于过程间以及过程内通信)
zeromq
并非相似rabbitmq
音讯排队,它实际上只一个音讯排队组件,一个库。
Pyzmq官网: | zeromq.org/languages/python/ |
---|---|
Github | github.com/zeromq/pyzmq |
Docs | zeromq.github.io/pyzmq/ |
Guide | zguide.zeromq.org/py:all |
Download
pip install pyzmq
Pyzmq的几种模式
1. 申请应对模式(Request-Reply)(rep 以及 req)
音讯双向的,有来有往,req端申请的音讯,rep端必需回答给req端
2. 定阅公布模式 (pub 以及 sub)
音讯单向的,有去无回的。可依照公布端可公布制订主题的音讯,定阅端可定阅喜爱的主题,定阅端只会收到本人曾经定阅的主题。公布端公布一条音讯,可被多个定阅端共事收到。
3. push pull模式
音讯单向的,也是有去无回的。push的任何一个音讯,始终只会有一个pull端收到音讯.
后续的代办署理模式以及路由模式等都是正在三种根本模式下面的扩大或变异。
1. Request-Reply模式(申请呼应模子):
客户端正在申请后,效劳端必需回呼应
由客户端发动申请,并期待效劳端呼应申请。从客户端端来看,肯定是一对对发收配对的;
反之,正在效劳端肯定是收发对。效劳端以及客户端均可所以1:N的模子。通常把1以为是server,N以为是Client。
ZMQ能够很好的支持路由性能(完成路由性能的组件叫做Device),把1:N扩大为N:M(只要要退出若干路由节点)。
从这个模子看,更底层的端点地点是对下层暗藏的。每一个申请都隐含回应地点,而使用则没有关怀它
效劳端:
sever.py
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()
客户端:
#client.py
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'))
2.Publish-Subscribe模式(公布定阅模子):
播送一切client,不行列步队缓存,断开衔接数据将永远失落。client能够进行数据过滤。
效劳端
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)
客户端1
client1.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)
客户端2
client2.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)
3.Parallel Pipeline模式(管道模子):
由三局部组成,push进行数据推送,work进行数据缓存,pull进行数据竞争猎取解决。区分于Publish-Subscribe存正在一个数据缓存以及解决负载。
当衔接被断开,数据没有会失落,重连后数据持续发送到对端。
server.py
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)
以上就是对于Pyzmq引见的具体内容,更多请存眷资源魔其它相干文章!
标签: Python python教程 python编程 python使用问题 Pyzmq
抱歉,评论功能暂时关闭!