關(guān)于ZeroMQ 三種模式python3實(shí)現(xiàn)方式
ZeroMQ是一個(gè)消息隊(duì)列網(wǎng)絡(luò)庫,實(shí)現(xiàn)網(wǎng)絡(luò)常用技術(shù)封裝。在C/S中實(shí)現(xiàn)了三種模式,這段時(shí)間用python簡單實(shí)現(xiàn)了一下,感覺python雖然靈活。但是數(shù)據(jù)處理不如C++自由靈活。
Request-Reply模式:
客戶端在請求后,服務(wù)端必須回響應(yīng)

server:
# -*-coding:utf-8 -*-
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('utf-8'))
clinet:
# -*-coding:utf-8 -*-
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()
print(data)
socket.send(data.encode('utf-8'))
response = socket.recv();
print (response)
Publish-Subscribe模式:
廣播所有client,沒有隊(duì)列緩存,斷開連接數(shù)據(jù)將永遠(yuǎn)丟失。client可以進(jìn)行數(shù)據(jù)過濾。

server:
# -*-coding:utf-8 -*-
import zmq
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://127.0.0.1:5000")
while True:
data = input('input your data:')
socket.send(data.encode('utf-8'))
clinet:
# -*-coding:utf-8 -*-
import time
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://127.0.0.1:5000")
socket.setsockopt(zmq.SUBSCRIBE, ''.encode('utf-8'))
while True:
print(socket.recv())
Parallel Pipeline模式:
由三部分組成,push進(jìn)行數(shù)據(jù)推送,work進(jìn)行數(shù)據(jù)緩存,pull進(jìn)行數(shù)據(jù)競爭獲取處理。區(qū)別于Publish-Subscribe存在一個(gè)數(shù)據(jù)緩存和處理負(fù)載。
當(dāng)連接被斷開,數(shù)據(jù)不會丟失,重連后數(shù)據(jù)繼續(xù)發(fā)送到對端

server:
# -*-coding:utf-8 -*-
import zmq
context = zmq.Context()
recive = context.socket(zmq.PULL)
recive.connect('tcp://127.0.0.1:5558')
while True:
data = recive.recv()
print(data)
work:
# -*-coding:utf-8 -*-
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()
print(data)
sender.send(data)
clinet:
# -*-coding:utf-8 -*-
import zmq
import time
context = zmq.Context()
socket = context.socket(zmq.PUSH)
socket.bind('tcp://*:5557')
while True:
data = input('input your data:')
print(data)
socket.send(data.encode('utf-8'))
以上這篇關(guān)于ZeroMQ 三種模式python3實(shí)現(xiàn)方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
django實(shí)現(xiàn)支付寶支付實(shí)例講解
在本篇文章里小編給大家整理的是一篇關(guān)于django支付寶支付的代碼實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2019-10-10
使用python實(shí)現(xiàn)男神女神顏值打分系統(tǒng)(推薦)
這篇文章主要介紹了用python做一個(gè)男神女神顏值打分系統(tǒng)(程序分析見注釋),需要的朋友可以參考下2019-10-10
Python實(shí)現(xiàn)的調(diào)用C語言函數(shù)功能簡單實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)的調(diào)用C語言函數(shù)功能,結(jié)合簡單實(shí)例形式分析了Python使用ctypes模塊調(diào)用C語言函數(shù)的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
使用Python3中的gettext模塊翻譯Python源碼以支持多語言
這篇文章主要介紹了使用Python3中的gettext模塊翻譯Python源碼以支持多語言,其中翻譯Python源碼只是作為示例以展示gettext的功能和用法,需要的朋友可以參考下2015-03-03
python多進(jìn)程實(shí)現(xiàn)進(jìn)程間通信實(shí)例
這篇文章主要介紹了python多進(jìn)程實(shí)現(xiàn)進(jìn)程間通信實(shí)例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11

