初探ZeroMQ(二) 請求-應答模式中套結字總結

參考資料:ØMQ - The Guide(英文)
參考資料:ØMQ - The Guide(中文)
本文主要介紹和總結在請求-應答模式中各種套結字的行爲.


套結字簡介

來點通俗易懂的,先認識下請求-應答模式的套結字:
REQ: 它嚴格執行<發送-接收-發送-….>步驟,妥妥的”同步”過程,阻塞是常用的事兒,因爲沒有收到回覆,它是不能再次發送消息的.順便發消息的時候給消息加個空結構(分界符).
REP: 它嚴格執行<接收-發送-接收-….>步驟,同REQ一樣,它也是同步的.接收消息的時候順手把所有信封剝下來,等發送消息的時候再把信封粘上去.
ROUTER: 這玩意兒想收多少消息就收多少,想發多少消息就發多少,這就是任性的異步.順便還在收到的消息中添加消息的來源(信封),不管消息走多遠,都能返回家裏.
DEALER: 同ROUTER一樣,但不在收到的消息中添加消息的來源.任性的收消息和發消息就是了.


以下是譯文,原文地址:http://rfc.zeromq.org/spec:28

請求 - 應答模式

請求 - 應答模式適用於各種面向服務的架構。它有兩種基本形式:同步(REQ和REP)和異步(DEALER和ROUTER),其可以以各種方式混合。DEALER和ROUTER套接字構建了許多更高級別的協議塊,例如 Majordomo Protocol.

REQ 套結字類型

將REQ套接字類型作爲一組匿名服務的客戶端,發送請求和使用一個鎖步輪詢算法接收答覆。它是專爲簡單的請求 - 應答模型涉及的,它並不關心失敗的遠端連接引起的可靠性問題。

常規行爲:

-可以連接到任意數量的REP或ROUTER遠端。
-將在發送一個消息後,馬上準備接收一個消息。

請求和應答消息在傳輸時的格式 :

-由REQ套結字添加一個分界符,該分界賦是一個空的結構 
-至少一個含有數據的結構, 這些數據是對應用程序可見的.

處理傳出的消息:

-將會給發出的消息的前面添加一個空的分界符結構
-將會採用輪詢的策略來路由傳出的信息給與已經建立的遠端連接
-在沒有連接時,進會阻塞在發送上,或者返回一個合適的error
-將不會丟棄它不能發送的信息

處理傳入的消息:

-將只會從最後一個發出請求的連接那裏接收消息
-將會默默的丟棄從其他連接那裏接收到的消息

REP套結字類型

REP套接字類型充當一組客戶端的服務,接收請求和發送應答給客戶端。它是專爲簡單的遠程過程調用模型設計的.

常規行爲:

-可以連接到任意數量的REQ或DEALER遠端
-不會過濾或修改以任何方式傳出或傳入的消息
-將會在收到一個消息後,馬上發送一個消息.

請求和應答消息在傳輸時的格式 :

-由至少0個結構組成的地址信封,每個結構都包含一個連接的身份信息
-一個分界符,該分界賦是一個空的結構  
-至少一個含有數據的結構, 這些數據是對應用程序可見的.

處理傳入的消息:

-將使用公平隊列策略從多個連接中接收消息
-將會剝離並存儲地址信封,包括分界賦
-將先應用程序傳入被剝離後的所有消息結構.

處理傳出的消息:

-將等待來自應用程序的回覆消息.
-將會給傳出的信息的前面加上被剝離的地址信息和分界賦
-將會發送回復消息給發來請求的連接
-如果遠端連接斷開了連接,將會默默的丟棄信息,或者返回一個錯誤
-將不會阻塞在發送上.

DEALER 套結字類型

DEALER套接字類型跟一組匿名的連接通信,使用輪詢算法發送和接收消息。它是可靠的,因爲它不下降消息。對於跟REP或ROUTER的服務器通信的客戶端,DEALER可以作爲一個異步的方法來替代REQ。它也可用於在請求 - 應答模式的代理中。

常規行爲:

-可以連接任意數量的REP或ROUTER遠端連接,既可以發送消息,也可以接收消息
-不會過濾或修改以任何方式傳出或傳入的消息
-將包含兩個隊列(傳入/傳出隊列)給每個連接,允許傳入傳出數據獨立的排隊
-將在啓動一個傳出連接的時候創建兩個隊列,不管連接是否建立,它都包含則兩個隊列
-將在新連接到來時創建兩個隊列.如果斷開連接,DEALER套結字將會摧毀這兩個隊列,並且丟棄隊列中包含的消息.
-應該限制運行時傳入傳出隊列的大小

處理傳出數據:

-僅當連接的傳出隊列未滿時,才認爲該連接可用
-將採用輪詢的策略去路由傳出的消息給可用的連接
-當它沒有可用的連接時,將阻塞在發送上,或者返回一個合適的error.
-當它沒有可用的連接時,進不會接收進一步的消息.
-將不會丟棄它不能排隊的消息.

處理傳入數據:

-將會採用公平隊列策略接收消息.
-將會傳遞消息給應用程序.

ROUTER 套結字

ROUTER 套結字通過顯示的地址來連接一組遠端連接,使用顯示連接的目的是爲了傳出消息路由,ROUTER 作爲 REP 的異步替代方法, 經常被服務器用來更DEALER客戶端交流.

常規行爲:

-可以被任意數量的REQ,DEALER,ROUTER的遠端連接,既可以發送消息,也可以接收消息
-將包含兩個隊列(傳入/傳出隊列)給每個連接,允許傳入傳出數據獨立的排隊
-將在啓動一個傳出連接的時候創建兩個隊列,不管連接是否建立,它都包含則兩個隊列
-將在新連接到來時創建兩個隊列.如果斷開連接,DEALER套結字將會摧毀這兩個隊列,並且丟棄隊列中包含的消息.
-將會通過"identity"二進制字符串來標識每個連接的輸入輸出隊列
-應該允許遠端連接通過Identity元屬性來顯示的分配它自己的identity
-應該限制運行時傳入傳出隊列的大小

處理傳入數據:

-將會採用公平隊列策略接收消息.
-將會給收到的消息的前面添加一個結構,該結構含有收發隊列的identity
-將會把添加了identity的消息傳遞給應用程序.

處理傳出數據:

-將會移除傳出數據的第一個結構,並用該結構(即identity)來查找收發隊列,一個收發隊列代表了一個遠端連接
-如果傳出隊列存在,並且擁有空間,將會路由傳出數據給傳出隊列
-如果傳出隊列不存在,或者傳出隊列已滿,將根據配置信息,決定是默默的丟棄信息還是返回錯誤
-將不會阻塞在消息發送上.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章