中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

關(guān)于Pyzmq介紹

【相關(guān)學習推薦:python教程】

10余年的交城網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整交城建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“交城網(wǎng)站設(shè)計”,“交城網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。Pyzmq介紹

ZMQ (以下 ZeroMQ 簡稱 ZMQ)是一個簡單好用的傳輸層,像框架一樣的一個 socket library,他使得 Socket 編程更加簡單、簡潔和性能更高。

是一個消息處理隊列庫,可在多個線程、內(nèi)核和主機盒之間彈性伸縮。ZMQ 的明確目標是“成為標準網(wǎng)絡(luò)協(xié)議棧的一部分,之后進入 Linux 內(nèi)核”。

ZMQ 讓編寫高性能網(wǎng)絡(luò)應用程序極為簡單和有趣。

ZeroMQ并不是一個對socket的封裝,不能用它去實現(xiàn)已有的網(wǎng)絡(luò)協(xié)議。

它有自己的模式,不同于更底層的點對點通訊模式。

它有比tcp協(xié)議更高一級的協(xié)議。(當然ZeroMQ不一定基于TCP協(xié)議,它也可以用于進程間和進程內(nèi)通訊)

zeromq并不是類似rabbitmq消息列隊,它實際上只一個消息列隊組件,一個庫。

Pyzmq官網(wǎng):zeromq.org/languages/python/Githubgithub.com/zeromq/pyzmqDocszeromq.github.io/pyzmq/Guidezguide.zeromq.org/py:allDownload

pip install pyzmq

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ù)的代理模式和路由模式等都是在三種基本模式上面的擴展或變異。

1. Request-Reply模式(請求響應模型):

客戶端在請求后,服務端必須回響應

由客戶端發(fā)起請求,并等待服務端響應請求。從客戶端端來看,一定是一對對發(fā)收配對的;

反之,在服務端一定是收發(fā)對。服務端和客戶端都可以是1:N的模型。通常把1認為是server,N認為是Client。

ZMQ可以很好的支持路由功能(實現(xiàn)路由功能的組件叫做Device),把1:N擴展為N:M(只需要加入若干路由節(jié)點)。

從這個模型看,更底層的端點地址是對上層隱藏的。每個請求都隱含回應地址,而應用則不關(guān)心它

服務端:

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("請輸入內(nèi)容:").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模式(發(fā)布訂閱模型):

廣播所有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)
3.Parallel Pipeline模式(管道模型):

由三部分組成,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)

當前標題:關(guān)于Pyzmq介紹
網(wǎng)站網(wǎng)址:http://www.rwnh.cn/article48/cpgiep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)網(wǎng)站內(nèi)鏈、搜索引擎優(yōu)化網(wǎng)站設(shè)計、定制開發(fā)、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設(shè)
汉寿县| 武威市| 北票市| 且末县| 屏南县| 香格里拉县| 舒城县| 龙门县| 凉山| 镇远县| 西林县| 洛阳市| 宁都县| 建昌县| 安塞县| 广安市| 邵东县| 兴业县| 泰安市| 延长县| 沧源| 桃园市| 永城市| 二手房| 铁岭市| 儋州市| 泸西县| 信阳市| 大厂| 晋江市| 廉江市| 盖州市| 三河市| 乌鲁木齐市| 巢湖市| 广德县| 安阳县| 化州市| 长葛市| 乐昌市| 玛沁县|