ZMQ 三种模型
FROM: http://blog.csdn.net/lfsf802/article/details/38238007
一、ZeroMQ的背景介紹
官方: “ZMQ(以下ZeroMQ簡稱ZMQ)是一個簡單好用的傳輸層,像框架一樣的一個socket library,他使得Socket編程更加簡單、簡潔和性能更高。是一個消息處理隊列庫,可在多個線程、內核和主機盒之間彈性伸縮。ZMQ的明確目標是“成為標準網絡協議棧的一部分,之后進入Linux內核”。現在還未看到它們的成功。但是,它無疑是極具前景的、并且是人們更加需要的“傳統”BSD套接字之上的一 層封裝。ZMQ讓編寫高性能網絡應用程序極為簡單和有趣。”
與其他消息中間件相比,ZMQ并不像是一個傳統意義上的消息隊列服務器,事實上,它也根本不是一個服務器,它更像是一個底層的網絡通訊庫,在Socket API之上做了一層封裝,將網絡通訊、進程通訊和線程通訊抽象為統一的API接口。
二、ZMQ是什么
閱讀了ZMQ的Guide文檔后,我的理解是,這是個類似于Socket的一系列接口,他跟Socket的區別是:普通的socket是端到端的(1:1的關系),而ZMQ卻是可以N:M 的關系,人們對BSD套接字的了解較多的是點對點的連接,點對點連接需要顯式地建立連接、銷毀連接、選擇協議(TCP/UDP)和處理錯誤等,而ZMQ屏蔽了這些細節,讓你的網絡編程更為簡單。ZMQ用于node與node間的通信,node可以是主機或者是進程。
三、三種模型
a)????應答模式:
使用REQ-REP套接字發送和接受消息是需要遵循一定規律的。客戶端首先使用zmq_send()發送消息,再用zmq_recv()接收,如此循環。如果打亂了這個順序(如連續發送兩次)則會報錯。類似地,服務端必須先進行接收,后進行發送。
b)????訂閱發布模式
PUB-SUB套接字組合是異步的。客戶端在一個循環體中使用recv ()接收消息,如果向SUB套接字發送消息則會報錯;類似地,服務端可以不斷地使用send ()發送消息,但不能再PUB套接字上使用recv ()。
關于PUB-SUB套接字,還有一點需要注意:你無法得知SUB是何時開始接收消息的。就算你先打開了SUB套接字,后打開PUB發送消息,這時SUB還是會丟失一些消息的,因為建立連接是需要一些時間的。很少,但并不是零。解決此問題需要在PUB端加入sleep。
?
c)?????基于分布式處理(管道模式)
?
這篇博客對ZMQ有一個初步的介紹,下篇博客介紹如何通過JAVA來調用ZMQ實現消息處理。
總結
- 上一篇: Caffe + Ubuntu 14.04
- 下一篇: ZMQ研究