摘要:的明確目標(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)閉套接字和上下文備注說明如何利用使用首先下載所需的包,解壓以后將和文件放到自己電腦中的安裝路徑中的文件夾下,最后需要將之前解壓后的包放在項(xiàng)目的中或者資源下載鏈接密碼項(xiàng)目源碼下載鏈接鏈接密碼 在講ZeroMQ前先給大家講一下什么是消息隊(duì)列。 消息隊(duì)列簡介: 消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合,異步消息,流量削鋒等問題。實(shí)現(xiàn)高性能,高可用,可伸縮和最終一致性架構(gòu)。是...
摘要:輸出結(jié)果輸出結(jié)果此外還有兩種實(shí)現(xiàn)單例的方式,我呢也給大家列出來,方便大家學(xué)習(xí)和參考方式一方式二單例模式實(shí)現(xiàn)方式二。。。 什么是單例模式?通俗點(diǎn)講:單例模式就是在程序執(zhí)行的過程中,類只有一個實(shí)例,這不是說單例模式只能去創(chuàng)建一個實(shí)例,而是你創(chuàng)建的所有實(shí)例(也就是對象)都指的是同一個實(shí)例。如何做到這一點(diǎn)呢?我們的__new__特殊方法就派上用場了,可能大家對這個方法熟悉又陌生,那么接下來通過...
摘要:我推薦你使用進(jìn)行日志收集,將作為的出口。集群目前暫時沒有提供日志查看機(jī)制。以如下的形式啟動容器,容器日志將發(fā)往配置的。 【作者barnett】本文介紹了k8s官方提供的日志收集方法,并介紹了Fluentd日志收集器并與其他產(chǎn)品做了比較。最后介紹了好雨云幫如何對k8s進(jìn)行改造并使用ZeroMQ以消息的形式將日志傳輸?shù)浇y(tǒng)一的日志處理中心。 容器日志存在形式 目前容器日志有兩種輸出形式: ...
摘要:我推薦你使用進(jìn)行日志收集,將作為的出口。集群目前暫時沒有提供日志查看機(jī)制。以如下的形式啟動容器,容器日志將發(fā)往配置的。 【作者barnett】本文介紹了k8s官方提供的日志收集方法,并介紹了Fluentd日志收集器并與其他產(chǎn)品做了比較。最后介紹了好雨云幫如何對k8s進(jìn)行改造并使用ZeroMQ以消息的形式將日志傳輸?shù)浇y(tǒng)一的日志處理中心。 容器日志存在形式 目前容器日志有兩種輸出形式: ...
閱讀 3137·2021-11-24 11:14
閱讀 3660·2021-11-22 15:22
閱讀 3277·2021-09-27 13:36
閱讀 796·2021-08-31 14:29
閱讀 1385·2019-08-30 15:55
閱讀 1853·2019-08-29 17:29
閱讀 1194·2019-08-29 16:24
閱讀 2529·2019-08-26 13:48