概述
ZeroMQ(也稱為 ?MQ,0MQ 或 zmq)是一個(gè)可嵌入的網(wǎng)絡(luò)通訊庫(對 Socket 進(jìn)行了封裝)。 它提供了攜帶跨越多種傳輸協(xié)議(如:進(jìn)程內(nèi),進(jìn)程間,TCP 和多播)的原子消息的 sockets 。 有了ZeroMQ,我們可以通過發(fā)布-訂閱、任務(wù)分發(fā)、和請求-回復(fù)等模式來建立 N-N 的 socket 連接。 ZeroMQ 的異步 I / O 模型為我們提供可擴(kuò)展的基于異步消息處理任務(wù)的多核應(yīng)用程序。 它有一系列語言API(幾乎囊括所有編程語言),并能夠在大多數(shù)操作系統(tǒng)上運(yùn)行。
傳統(tǒng)的 TCP Socket 的連接是1對1的,可以認(rèn)為“1個(gè) socket = 1個(gè)連接”,每一個(gè)線程獨(dú)立維護(hù)一個(gè) socket 。但是 ZMQ 摒棄了這種1對1的模式,ZMQ的 Socket 可以很輕松地實(shí)現(xiàn)1對N和N對N的連接模式,一個(gè) ZMQ 的 socket 可以自動(dòng)地維護(hù)一組連接,用戶無法操作這些連接,用戶只能操作套接字而不是連接本身。所以說在 ZMQ 的世界里,連接是私有的。
三種基本模型
ZMQ 提供了三種基本的通信模型,分別是 Request-Reply 、Publish-Subscribe 和 Parallel Pipeline ,接下來舉例說明三種模型并給出相應(yīng)的代碼實(shí)現(xiàn)。
Request-Reply(請求-回復(fù))
以 “Hello World” 為例??蛻舳税l(fā)起請求,并等待服務(wù)端回應(yīng)請求??蛻舳税l(fā)送一個(gè)簡單的 “Hello”,服務(wù)端則回應(yīng)一個(gè) “World”??梢杂?N 個(gè)客戶端,一個(gè)服務(wù)端,因此是 1-N 連接。