摘要:的明確目標是成為標準網絡協議棧的一部分,之后進入內核。實現端測試消息已發送端正在轉發端輸出結果已發送已發送已發送正在轉發正在轉發正在轉發測試消息測試消息測試消息
簡介
ZMQ (以下 ZeroMQ 簡稱 ZMQ)是一個簡單好用的傳輸層,像框架一樣的一個 socket library,他使得 Socket 編程更加簡單、簡潔和性能更高。是一個消息處理隊列庫,可在多個線程、內核和主機盒之間彈性伸縮。ZMQ 的明確目標是“成為標準網絡協議棧的一部分,之后進入 Linux 內核”。現在還未看到它們的成功。但是,它無疑是極具前景的、并且是人們更加需要的“傳統”BSD 套接字之上的一層封裝。ZMQ 讓編寫高性能網絡應用程序極為簡單和有趣。
zeromq 并不是類似rabbitmq消息列隊,它實際上只一個消息列隊組件,一個庫。
zeromq的幾種模式 Request-Reply模式:客戶端在請求后,服務端必須回響應
Python實現:
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,沒有隊列緩存,斷開連接數據將永遠丟失。client可以進行數據過濾。
Python實現
server端:
# -*- coding=utf-8 -*- import zmq import time context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind("tcp://*:5555") while True: print("發送消息") socket.send("消息群發") 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 發送消息 發送消息 發送消息 $ python app/client2.py response: 消息群發 response: 消息群發 response: 消息群發 $ python app/client1.py response: 消息群發 response: 消息群發 response: 消息群發Parallel Pipeline模式:
由三部分組成,push進行數據推送,work進行數據緩存,pull進行數據競爭獲取處理。區別于Publish-Subscribe存在一個數據緩存和處理負載。
當連接被斷開,數據不會丟失,重連后數據繼續發送到對端。
Python實現
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 "已發送" 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 "正在轉發..." 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)
輸出結果:
$ python app/server.py 已發送 已發送 已發送 $ python app/work.py 正在轉發... 正在轉發... 正在轉發... $ python app/client1.py response: 測試消息 response: 測試消息 response: 測試消息
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44472.html
摘要:關閉套接字和上下文備注說明如何利用使用首先下載所需的包,解壓以后將和文件放到自己電腦中的安裝路徑中的文件夾下,最后需要將之前解壓后的包放在項目的中或者資源下載鏈接密碼項目源碼下載鏈接鏈接密碼 在講ZeroMQ前先給大家講一下什么是消息隊列。 消息隊列簡介: 消息隊列中間件是分布式系統中重要的組件,主要解決應用耦合,異步消息,流量削鋒等問題。實現高性能,高可用,可伸縮和最終一致性架構。是...
摘要:輸出結果輸出結果此外還有兩種實現單例的方式,我呢也給大家列出來,方便大家學習和參考方式一方式二單例模式實現方式二。。。 什么是單例模式?通俗點講:單例模式就是在程序執行的過程中,類只有一個實例,這不是說單例模式只能去創建一個實例,而是你創建的所有實例(也就是對象)都指的是同一個實例。如何做到這一點呢?我們的__new__特殊方法就派上用場了,可能大家對這個方法熟悉又陌生,那么接下來通過...
摘要:我推薦你使用進行日志收集,將作為的出口。集群目前暫時沒有提供日志查看機制。以如下的形式啟動容器,容器日志將發往配置的。 【作者barnett】本文介紹了k8s官方提供的日志收集方法,并介紹了Fluentd日志收集器并與其他產品做了比較。最后介紹了好雨云幫如何對k8s進行改造并使用ZeroMQ以消息的形式將日志傳輸到統一的日志處理中心。 容器日志存在形式 目前容器日志有兩種輸出形式: ...
摘要:我推薦你使用進行日志收集,將作為的出口。集群目前暫時沒有提供日志查看機制。以如下的形式啟動容器,容器日志將發往配置的。 【作者barnett】本文介紹了k8s官方提供的日志收集方法,并介紹了Fluentd日志收集器并與其他產品做了比較。最后介紹了好雨云幫如何對k8s進行改造并使用ZeroMQ以消息的形式將日志傳輸到統一的日志處理中心。 容器日志存在形式 目前容器日志有兩種輸出形式: ...
閱讀 3069·2021-11-24 11:14
閱讀 3480·2021-11-22 15:22
閱讀 3200·2021-09-27 13:36
閱讀 712·2021-08-31 14:29
閱讀 1328·2019-08-30 15:55
閱讀 1752·2019-08-29 17:29
閱讀 1143·2019-08-29 16:24
閱讀 2400·2019-08-26 13:48