概述

ZeroMQ(也稱(chēng)為 ?MQ,0MQ 或 zmq)是一個(gè)可嵌入的網(wǎng)絡(luò)通訊庫(kù)(對(duì) Socket 進(jìn)行了封裝)。 它提供了攜帶跨越多種傳輸協(xié)議(如:進(jìn)程內(nèi),進(jìn)程間,TCP 和多播)的原子消息的 sockets 。 有了ZeroMQ,我們可以通過(guò)發(fā)布-訂閱、任務(wù)分發(fā)、和請(qǐng)求-回復(fù)等模式來(lái)建立 N-N 的 socket 連接。 ZeroMQ 的異步 I / O 模型為我們提供可擴(kuò)展的基于異步消息處理任務(wù)的多核應(yīng)用程序。 它有一系列語(yǔ)言API(幾乎囊括所有編程語(yǔ)言),并能夠在大多數(shù)操作系統(tǒng)上運(yùn)行。

傳統(tǒng)的 TCP Socket 的連接是1對(duì)1的,可以認(rèn)為“1個(gè) socket = 1個(gè)連接”,每一個(gè)線(xiàn)程獨(dú)立維護(hù)一個(gè) socket 。但是 ZMQ 摒棄了這種1對(duì)1的模式,ZMQ的 Socket 可以很輕松地實(shí)現(xiàn)1對(duì)N和N對(duì)N的連接模式,一個(gè) ZMQ 的 socket 可以自動(dòng)地維護(hù)一組連接,用戶(hù)無(wú)法操作這些連接,用戶(hù)只能操作套接字而不是連接本身。所以說(shuō)在 ZMQ 的世界里,連接是私有的。

三種基本模型

ZMQ 提供了三種基本的通信模型,分別是 Request-Reply 、Publish-Subscribe 和 Parallel Pipeline ,接下來(lái)舉例說(shuō)明三種模型并給出相應(yīng)的代碼實(shí)現(xiàn)。

Request-Reply(請(qǐng)求-回復(fù))

以 “Hello World” 為例??蛻?hù)端發(fā)起請(qǐng)求,并等待服務(wù)端回應(yīng)請(qǐng)求??蛻?hù)端發(fā)送一個(gè)簡(jiǎn)單的 “Hello”,服務(wù)端則回應(yīng)一個(gè) “World”。可以有 N 個(gè)客戶(hù)端,一個(gè)服務(wù)端,因此是 1-N 連接。