亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

zeromq的三種簡單模式(python實(shí)現(xiàn))

lufficc / 1389人閱讀

摘要:的明確目標(biāo)是成為標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議棧的一部分,之后進(jìn)入內(nèi)核。實(shí)現(xiàn)端測試消息已發(fā)送端正在轉(zhuǎn)發(fā)端輸出結(jié)果已發(fā)送已發(fā)送已發(fā)送正在轉(zhuǎn)發(fā)正在轉(zhuǎn)發(fā)正在轉(zhuǎn)發(fā)測試消息測試消息測試消息

簡介
ZMQ (以下 ZeroMQ 簡稱 ZMQ)是一個簡單好用的傳輸層,像框架一樣的一個 socket library,他使得 Socket 編程更加簡單、簡潔和性能更高。是一個消息處理隊(duì)列庫,可在多個線程、內(nèi)核和主機(jī)盒之間彈性伸縮。ZMQ 的明確目標(biāo)是“成為標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議棧的一部分,之后進(jìn)入 Linux 內(nèi)核”?,F(xiàn)在還未看到它們的成功。但是,它無疑是極具前景的、并且是人們更加需要的“傳統(tǒng)”BSD 套接字之上的一層封裝。ZMQ 讓編寫高性能網(wǎng)絡(luò)應(yīng)用程序極為簡單和有趣。

zeromq 并不是類似rabbitmq消息列隊(duì),它實(shí)際上只一個消息列隊(duì)組件,一個庫。

zeromq的幾種模式 Request-Reply模式:

客戶端在請求后,服務(wù)端必須回響應(yīng)

Python實(shí)現(xiàn):
server端:

# -*- coding=utf-8 -*-
import zmq

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")

while True:
    message = socket.recv()
    print("Received: %s" % message)
    socket.send("I am OK!")

client端:

# -*- coding=utf-8 -*-

import zmq
import sys

context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555")

socket.send("Are you OK?")
response = socket.recv();
print("response: %s" % response)

輸出:

$ python app/server.py 
Received: Are you OK?

$ python app/client1.py 
response: I am OK!
Publish-Subscribe模式:

廣播所有client,沒有隊(duì)列緩存,斷開連接數(shù)據(jù)將永遠(yuǎn)丟失。client可以進(jìn)行數(shù)據(jù)過濾。

Python實(shí)現(xiàn)
server端:

# -*- coding=utf-8 -*-
import zmq
import time

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5555")

while True:
    print("發(fā)送消息")
    socket.send("消息群發(fā)")
    time.sleep(1)    

client端1:

# -*- coding=utf-8 -*-

import zmq
import sys

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5555")
socket.setsockopt(zmq.SUBSCRIBE,"")  # 消息過濾
while True:
    response = socket.recv();
    print("response: %s" % response)

client端2:

# -*- coding=utf-8 -*-

import zmq
import sys

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5555")
socket.setsockopt(zmq.SUBSCRIBE,"") 
while True:
    response = socket.recv();
    print("response: %s" % response)

輸出:

$ python app/server.py 
發(fā)送消息
發(fā)送消息
發(fā)送消息

$ python app/client2.py 
response: 消息群發(fā)
response: 消息群發(fā)
response: 消息群發(fā)

$ python app/client1.py 
response: 消息群發(fā)
response: 消息群發(fā)
response: 消息群發(fā)
Parallel Pipeline模式:

由三部分組成,push進(jìn)行數(shù)據(jù)推送,work進(jìn)行數(shù)據(jù)緩存,pull進(jìn)行數(shù)據(jù)競爭獲取處理。區(qū)別于Publish-Subscribe存在一個數(shù)據(jù)緩存和處理負(fù)載。

當(dāng)連接被斷開,數(shù)據(jù)不會丟失,重連后數(shù)據(jù)繼續(xù)發(fā)送到對端。

Python實(shí)現(xiàn)

server端:

# -*- coding=utf-8 -*-
import zmq
import time

context = zmq.Context()
socket = context.socket(zmq.PUSH)
socket.bind("tcp://*:5557")

while True:
    socket.send("測試消息")
    print "已發(fā)送"    
    time.sleep(1)    

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 "正在轉(zhuǎn)發(fā)..."
    sender.send(data)

client端:

# -*- coding=utf-8 -*-

import zmq
import sys

context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.bind("tcp://*:5558")

while True:
    response = socket.recv();
    print("response: %s" % response)

輸出結(jié)果:

$ python app/server.py 
已發(fā)送
已發(fā)送
已發(fā)送

$ python app/work.py 
正在轉(zhuǎn)發(fā)...
正在轉(zhuǎn)發(fā)...
正在轉(zhuǎn)發(fā)...

$ python app/client1.py
response: 測試消息
response: 測試消息
response: 測試消息

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/44472.html

相關(guān)文章

  • 初探ZeroMQ

    摘要:關(guān)閉套接字和上下文備注說明如何利用使用首先下載所需的包,解壓以后將和文件放到自己電腦中的安裝路徑中的文件夾下,最后需要將之前解壓后的包放在項(xiàng)目的中或者資源下載鏈接密碼項(xiàng)目源碼下載鏈接鏈接密碼 在講ZeroMQ前先給大家講一下什么是消息隊(duì)列。 消息隊(duì)列簡介: 消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合,異步消息,流量削鋒等問題。實(shí)現(xiàn)高性能,高可用,可伸縮和最終一致性架構(gòu)。是...

    Harriet666 評論0 收藏0
  • python之單例模式實(shí)現(xiàn)三種方式

    摘要:輸出結(jié)果輸出結(jié)果此外還有兩種實(shí)現(xiàn)單例的方式,我呢也給大家列出來,方便大家學(xué)習(xí)和參考方式一方式二單例模式實(shí)現(xiàn)方式二。。。 什么是單例模式?通俗點(diǎn)講:單例模式就是在程序執(zhí)行的過程中,類只有一個實(shí)例,這不是說單例模式只能去創(chuàng)建一個實(shí)例,而是你創(chuàng)建的所有實(shí)例(也就是對象)都指的是同一個實(shí)例。如何做到這一點(diǎn)呢?我們的__new__特殊方法就派上用場了,可能大家對這個方法熟悉又陌生,那么接下來通過...

    dack 評論0 收藏0
  • 關(guān)于k8s集群容器日志收集的總結(jié)

    摘要:我推薦你使用進(jìn)行日志收集,將作為的出口。集群目前暫時沒有提供日志查看機(jī)制。以如下的形式啟動容器,容器日志將發(fā)往配置的。 【作者barnett】本文介紹了k8s官方提供的日志收集方法,并介紹了Fluentd日志收集器并與其他產(chǎn)品做了比較。最后介紹了好雨云幫如何對k8s進(jìn)行改造并使用ZeroMQ以消息的形式將日志傳輸?shù)浇y(tǒng)一的日志處理中心。 容器日志存在形式 目前容器日志有兩種輸出形式: ...

    jeffrey_up 評論0 收藏0
  • 關(guān)于k8s集群容器日志收集的總結(jié)

    摘要:我推薦你使用進(jìn)行日志收集,將作為的出口。集群目前暫時沒有提供日志查看機(jī)制。以如下的形式啟動容器,容器日志將發(fā)往配置的。 【作者barnett】本文介紹了k8s官方提供的日志收集方法,并介紹了Fluentd日志收集器并與其他產(chǎn)品做了比較。最后介紹了好雨云幫如何對k8s進(jìn)行改造并使用ZeroMQ以消息的形式將日志傳輸?shù)浇y(tǒng)一的日志處理中心。 容器日志存在形式 目前容器日志有兩種輸出形式: ...

    or0fun 評論0 收藏0

發(fā)表評論

0條評論

lufficc

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<