幾種ZeroMQ socket信封格式
本文僅僅簡單介紹zs的REQ、REP、ROUTER、DEALER信封,作爲閱讀ZeroMQ資料筆記
REP socket信封
REP存儲所有的消息幀,直到第一個空消息幀到達,應用層才接收到一個 消息。 發送回覆的時候,REP纔將已保存的信封附加到消息中,然後使用與ROUTER一樣的語義發送(事實上REP也構建於ROUTER之上),但是爲了匹配REQ,REP必須強制遵循接收/發送的循環模式。
REQ socket信封
如果使用一個REQ socket連接一個ROUTER socket併發送一個REQ消息,你將獲得一個由三個幀組成的消息,如下圖所示:
1. 第三幀的數據由應用通過REQ socket發送
2. 第二幀的空消息由REQ socket在發送消息時自動添加
3. 第一幀的回覆地址由ROUTER socket在消息到達應用之前添加
如果對設備鏈擴展,可以在信封中加上信封,最新的信封總是在消息棧的最前面。
ROUTER socket信封
第一種,REQ未設置身份標識的信封
如下圖所示,ROUTER對沒有設置身份標識的socket會分配一個唯一標識,也就是圖中的UUID
如果REQ socket通過zmq_setsockopt函數設置了身份標識,ROUTER應用層將會將其作爲該socket發送消息的第一幀
DEALER socket信封
使用ROUTER socket向DEALER socket發送消息時,信封僅需要添加一個身份幀(不需要發送空消息幀做分隔符)
ROUTER socket會移除第一幀,僅發送第二幀。而ROUTER socket 收到DEALER socket 發送的消息後,會將身份幀加入到消息幀之前。
總結
英語不怎麼樣,所有有理解不到位的地方還請諸位指正。
近期時間比較緊張,幾乎每天都是朝八晚九(早上還要五點起牀看書晨跑),所有真正能夠花在學習ZeroMQ的時間並不多。我不得不承認這比我最初想象的學習曲線要曲折不少,因爲我必須充分了解它,才知道它適如何組合才能在特定系統中表現最佳,看來我還是too simple)
參考資料
http://zguide2.zeromq.org/page:all#toc47
如果還是不清楚,或是需要例子,請轉到:http://blog.csdn.net/pc0de/article/details/53057100