zeromq總結

概述

我們真正需要的是這樣一種消息軟件,它能夠做大型消息軟件所能做的一切,但使用起來又非常簡單,成本很低,可以用到所有的應用程序中,沒有任何依賴條件。因爲沒有了額外的模塊,就降低了出錯的概率。這種軟件需要能夠在所有的操作系統上運行,並能支持所有的編程語言。

ZMQ就是這樣一種軟件:它高效,提供了嵌入式的類庫,使應用程序能夠很好地在網絡中擴展,成本低廉。

ZMQ的主要特點有:

  •  ZMQ會在後臺線程異步地處理I/O操作,它使用一種不會死鎖的數據結構來存儲消息。
  •  網絡組件可以來去自如,ZMQ會負責自動重連,這就意味着你可以以任何順序啓動組件;用它創建的面向服務架構(SOA)中,服務端可以隨意地加入或退出網絡。
  •  ZMQ會在有必要的情況下自動將消息放入隊列中保存,一旦建立了連接就開始發送。
  •  ZMQ有閾值(HWM)的機制,可以避免消息溢出。當隊列已滿,ZMQ會自動阻塞發送者,或丟棄部分消息,這些行爲取決於你所使用的消息模式。
  •  ZMQ可以讓你用不同的通信協議進行連接,如TCP、廣播、進程內、進程間。改變通信協議時你不需要去修改代碼。
  •  ZMQ會恰當地處理速度較慢的節點,會根據消息模式使用不同的策略。
  •  ZMQ提供了多種模式進行消息路由,如請求-應答模式、發佈-訂閱模式等。這些模式可以用來搭建網絡拓撲結構。
  •  ZMQ中可以根據消息模式建立起一些中間裝置(很小巧),可以用來降低網絡的複雜程度。
  •  ZMQ會發送整個消息,使用消息幀的機制來傳遞。如果你發送了10KB大小的消息,你就會收到10KB大小的消息。
  •  ZMQ不強制使用某種消息格式,消息可以是0字節的,或是大到GB級的數據。當你表示這些消息時,可以選用諸如谷歌的protocol buffers,XDR等序列化產品。
  •  ZMQ能夠智能地處理網絡錯誤,有時它會進行重試,有時會告知你某項操作發生了錯誤。
  •  ZMQ甚至可以降低對環境的污染,因爲節省了CPU時間意味着節省了電能。

其實ZMQ可以做的還不止這些,它會顛覆人們編寫網絡應用程序的模式。雖然從表面上看,它不過是提供了一套處理套接字的API,能夠用zmq_recv()和zmq_send()進行消息的收發,但是,消息處理將成爲應用程序的核心部分,很快你的程序就會變成一個個消息處理模塊,這既美觀又自然。它的擴展性還很強,每項任務由一個節點(節點是一個線程)、同一臺機器上的兩個節點(節點是一個進程)、同一網絡上的兩臺機器(節點是一臺機器)來處理,而不需要改動應用程序。

支持的傳輸協議

傳輸協議
描述
uri 示例
tcp
TCP的單播通信
tcp://*:8080
ipc
本地進程間通信
ipc://
inproc
本地線程間通信
inproc://
pgm
PGM廣播通信
pgm://
epgm
廣播通信
epgm://

核心消息模式

pattern
type
description
一對一結對模型
ZMQ_PAIR
 
請求迴應模型
ZMQ_REQ
client端使用
ZMQ_REP
server端使用
ZMQ_DEALER
將消息以輪詢的方式分發給所有對端(peers)
ZMQ_ROUTER
 
發佈訂閱模型
ZMQ_PUB
publisher端使用
ZMQ_XPUB
 
ZMQ_SUB
subscriber端使用
ZMQ_XSUB
 
管道模型
ZMQ_PUSH
push端使用
ZMQ_PULL
pull端使用
原生模型
ZMQ_STREAM
 

合法的套接字連接-綁定對(一端綁定、一端連接即可)

  • PUB - SUB
  • REQ - REP
  • REQ - ROUTER
  • DEALER - REP
  • DEALER - ROUTER
  • DEALER - DEALER
  • ROUTER - ROUTER
  • PUSH - PULL
  • PAIR - PAIR
其他的組合模式會產生不可預知的結果,在將來的ZMQ版本中可能會直接返回錯誤。你也可以通過代碼去了解這些套接字類型的行爲。
 
除了PAIR之外,其它模式都是支持一對多或多對一的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章