Pyzmq指的是什么?這個問題可能是我們?nèi)粘W習或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!
甌海ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
ZMQ (以下 ZeroMQ 簡稱 ZMQ)是一個簡單好用的傳輸層,像框架一樣的一個 socket library,他使得 Socket 編程更加簡單、簡潔和性能更高。
是一個消息處理隊列庫,可在多個線程、內(nèi)核和主機盒之間彈性伸縮。ZMQ 的明確目標是“成為標準網(wǎng)絡協(xié)議棧的一部分,之后進入 Linux 內(nèi)核”。
ZMQ 讓編寫高性能網(wǎng)絡應用程序極為簡單和有趣。
ZeroMQ并不是一個對socket的封裝,不能用它去實現(xiàn)已有的網(wǎng)絡協(xié)議。
它有自己的模式,不同于更底層的點對點通訊模式。
它有比tcp協(xié)議更高一級的協(xié)議。(當然ZeroMQ不一定基于TCP協(xié)議,它也可以用于進程間和進程內(nèi)通訊)
zeromq
并不是類似rabbitmq
消息列隊,它實際上只一個消息列隊組件,一個庫。
Pyzmq官網(wǎng): | zeromq.org/languages/python/ |
---|---|
Github | github.com/zeromq/pyzmq |
Docs | zeromq.github.io/pyzmq/ |
Guide | zguide.zeromq.org/py:all |
pip install pyzmq
1. 請求應答模式(Request-Reply)(rep 和 req)
消息雙向的,有來有往,req端請求的消息,rep端必須答復給req端
2. 訂閱發(fā)布模式 (pub 和 sub)
消息單向的,有去無回的。可按照發(fā)布端可發(fā)布制定主題的消息,訂閱端可訂閱喜歡的主題,訂閱端只會收到自己已經(jīng)訂閱的主題。發(fā)布端發(fā)布一條消息,可被多個訂閱端同事收到。
3. push pull模式
消息單向的,也是有去無回的。push的任何一個消息,始終只會有一個pull端收到消息.
后續(xù)的代理模式和路由模式等都是在三種基本模式上面的擴展或變異。
客戶端在請求后,服務端必須回響應
由客戶端發(fā)起請求,并等待服務端響應請求。從客戶端端來看,一定是一對對發(fā)收配對的;
反之,在服務端一定是收發(fā)對。服務端和客戶端都可以是1:N的模型。通常把1認為是server,N認為是Client。
ZMQ可以很好的支持路由功能(實現(xiàn)路由功能的組件叫做Device),把1:N擴展為N:M(只需要加入若干路由節(jié)點)。
從這個模型看,更底層的端點地址是對上層隱藏的。每個請求都隱含回應地址,而應用則不關心它
服務端:
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("請輸入內(nèi)容:").strip() if input1 == 'b': sys.exit() socket.send(input1.encode('utf-8')) message = socket.recv() print("Received reply: ", message.decode('utf-8'))
廣播所有client,沒有隊列緩存,斷開連接數(shù)據(jù)將永遠丟失。client可以進行數(shù)據(jù)過濾。
服務端
server.py
import zmq import time import sys context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind("tcp://*:5555") while True: msg = input("請輸入要發(fā)布的信息:").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)
由三部分組成,push進行數(shù)據(jù)推送,work進行數(shù)據(jù)緩存,pull進行數(shù)據(jù)競爭獲取處理。區(qū)別于Publish-Subscribe存在一個數(shù)據(jù)緩存和處理負載。
當連接被斷開,數(shù)據(jù)不會丟失,重連后數(shù)據(jù)繼續(xù)發(fā)送到對端。
server.py
import zmq import time context = zmq.Context() socket = context.socket(zmq.PUSH) socket.bind("tcp://*:5557") while True: msg = input("請輸入要發(fā)布的信息:").strip() socket.send(msg.encode('utf-8')) print("已發(fā)送") 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("正在轉(zhuǎn)發(fā)...") 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)
感謝各位的閱讀!看完上述內(nèi)容,你們對Pyzmq指的是什么大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關文章內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
標題名稱:Pyzmq指的是什么
路徑分享:http://m.2m8n56k.cn/article42/jjdsec.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設、微信公眾號、網(wǎng)站建設、小程序開發(fā)、靜態(tài)網(wǎng)站、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)