初探ZeroMQ(三) 發佈-訂閱模式中套結字總結

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


套結字簡介:

PUB: 多播套結字,只能發送消息給SUB/XSUB,不能接收消息
XPUB: 多播套結字,既能發送消息給SUB/XSUB,也可以接收來自XSUB的消息
SUB: 接收套結字,只能接收來自PUB/XPUB的消息,不能發送消息
XSUB: 接收套結字,既能接收來自PUB/XPUB的消息,也能發送消息給XPUB


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

發佈-訂閱模式

該模式用於事件和數據分配,通常是從少數發佈者到大量訂閱者的,但是也可以從大量發佈者到少量用戶。對於多對多的使用場景,該模式提供原始套接字類型(XPUB,XSUB)來建設分銷代理(distribution proxies),也叫經紀人(broker)。
確切的訂閱和過濾機制依賴於傳輸協議,並在相關文件中定義。對於TCP,參考地址http://rfc.zeromq.org/spec:23/ZMTP.

PUB 套結字類型

PUB套接字類型提供了基本的向一組用戶的單向廣播。通過TCP,它會對傳出的消息進行過濾,儘管如此,一個消息仍將被髮送多次,使其到達多個訂閱者。 PUB主要用於瞬態事件分佈,其中該網絡的穩定性比流量的可靠性更重要。

常規行爲:

-可以被任意數量的SUB或XSUB訂閱者連接,它只發送消息.
-將會爲每個建立連接的訂閱者維持一個傳出隊列.
-將在啓動一個到訂閱者的連接的時候創建一個傳出隊列,不管連接是否建立,它都包含則這個隊列.
-當訂閱者連接到PUB的時候,PUB套結字將創建一個傳出隊列,如果訂閱者斷開連接,PUB套結字將會摧毀該訂閱者的傳出隊列,並且丟棄掉隊列中的消息
-應該限制運行時傳出隊列的大小
-將會默默的丟棄掉訂閱者發給它的任何消息.

處理傳出數據:

-將不會以任何方式修改傳出的消息.
-依賴於傳輸,可能發送所有消息給所有訂閱者
-依賴於傳輸,可能僅僅發送消息給匹配的訂閱者
-將會針對訂閱消息的第一個結構進行一個二進制的比較
-如果傳出隊列已滿,將會默默的丟棄掉所有的消息.
-將不會阻塞在消息發送上.

處理傳入數據:

-根據使用的傳輸協議,PUB將會接收來自訂閱者的訂閱請求和取消訂閱請求.
-將不會傳遞這些訂閱命令給應用程序

XPUB 套結字類型

XPUB套接字類型擴展了PUB套結字不能接收來自匿名用戶信息的能力,並且將訂閱命令暴露給應用程序。 XPUB通常用於在代理中,但對高級應用程序也是有用的。

常規行爲:

-可以被任意數量的SUB或XSUB訂閱者連接,它既能發送消息,也能接收消息.
-將會爲每個建立連接的訂閱者維持兩個隊列(傳入/傳出隊列).
-將在啓動一個到訂閱者的連接的時候維持兩個隊列,不管連接是否建立,它都包含則這兩個隊列.
-當訂閱者連接到XPUB的時候,XPUB套結字將創建兩個隊列,如果訂閱者斷開連接,XPUB套結字將會摧毀爲該訂閱者維持的兩個隊列,並且丟棄掉隊列中的消息
-應該限制運行時傳出隊列的大小
-將會默默的丟棄掉訂閱者發給它的任何消息.

處理傳出的消息:

-將不會以任何方式修改傳出的消息.
-依賴於傳輸,可能發送所有消息給所有訂閱者
-依賴於傳輸,可能僅僅發送消息給匹配的訂閱者
-將會針對訂閱消息的第一個結構進行一個二進制的比較
-如果傳出隊列已滿,將會默默的丟棄掉所有的消息.
-將不會阻塞在消息發送上.

處理傳入的消息:

-將採用公平隊列策略接收來自訂閱者的消息
-將會傳遞這些消息給應用程序

處理訂閱:

-根據使用的傳輸協議,PUB將會接收來自訂閱者的訂閱請求和取消訂閱請求.
-將會傳遞這些命令給它的調用程序
-可能會根據配置信息規範傳遞給調用程序的命名, 以便使多個相同的訂閱僅僅使用一個命令
-如果訂閱者過早斷開連接,XPUB將會爲調用程序生成合適的退訂請求。

The SUB Socket Type

SUB套接字類型提供了向一組發佈者的基本單向監聽。

常規行爲:

-可以主動連接到任意數量的PUB,XPUB發佈者,僅僅接收消息
-將會爲每個建立連接的發佈者維持一個傳入消息隊列
-將在啓動一個到發佈者的連接的時候維持一個傳入隊列,不管連接是否建立,它都包含則這個隊列.
-當訂閱者連接到SUB的時候,SUB套結字將創建一個傳入隊列,如果發佈者斷開連接,SUB套結字將會摧毀該發佈者的傳入隊列,並且丟棄掉隊列中的消息
-應該限制運行時傳出隊列的大小

處理傳入的消息:

-如果爲發佈者維護的隊列已滿,將默默的丟棄後來的消息
-將會才用公平隊列策略接收來自發布者的消息
-不會以任何方式修改傳入的消息
-可能根據前綴匹配算法和訂閱消息,以此來過濾消息
-將會傳遞消息給應用程序

處理傳出的消息:

-根據使用的傳輸協議,SUB將會發送訂閱請求和取消訂閱請求到發佈者

The XSUB Socket Type

XSUB套接字類型擴展SUB套結字不能給上游發佈者發送消息和訂閱命令的能力。 XSUB通常用於在代理而且對高級應用程序也是有用的。

常規行爲:

-可以主動連接到任意數量的PUB或XPUB發佈者,它既能發送消息,也能接收消息.
-將會爲每個建立連接的訂閱者維持兩個隊列(傳入/傳出隊列).
-將在啓動一個到發佈者的連接的時候維持兩個隊列,不管連接是否建立,它都包含則這兩個隊列.
-當發佈者連接到XSUB的時候,XSUB套結字將創建兩個隊列,如果發佈者斷開連接,XSUB套結字將會摧毀爲該發佈者維持的兩個隊列,並且丟棄掉隊列中的消息
-應該限制運行時傳出隊列的大小
-將會默默的丟棄掉訂閱者發給它的任何消息.

處理傳入的消息:

-如果爲發佈者維護的輸入隊列已滿,將默默的丟棄後來的消息
-將會才用公平隊列策略接收來自發布者的消息
-不會以任何方式修改傳入的消息
-可能根據前綴匹配算法和訂閱消息,以此來過濾消息
-將會傳遞消息給應用程序

處理傳出的消息:

-不會以任何方式修改傳出的消息
-將會發送所有的消息給所有建立連接的發佈者
-如果爲發佈者維護的輸出隊列已滿,將默默的丟棄後來的消息
-將不會阻塞在消息發送上

處理訂閱:

-將會接收來自應用程序的訂閱命令
-根據使用的傳輸協議,XSUB將會發送訂閱請求和取消訂閱請求到發佈者
-當關閉一個到發佈者的連接的時候,應該發送取消訂閱請求給所有的訂閱.
發佈了30 篇原創文章 · 獲贊 58 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章