- ZeroMQ 教程
- ZeroMQ - 首頁
- ZeroMQ - 概述
- ZeroMQ - 安裝
- ZeroMQ - 特性
- ZeroMQ 訊息傳遞
- ZeroMQ - 套接字型別
- ZeroMQ - 通訊模式
- ZeroMQ - 傳輸協議
- ZeroMQ - 訊息框架
- 擴充套件性和效能
- ZeroMQ - 負載均衡
- ZeroMQ - SMP
- ZeroMQ - 多執行緒
- ZeroMQ - 效能注意事項
- ZeroMQ 有用資源
- ZeroMQ - 有用資源
- ZeroMQ - 討論
ZeroMQ - 套接字型別
在 ZeroMQ 中,套接字是網路程式設計的標準 API(應用程式程式設計介面)。這就是 ZeroMQ 提供熟悉的基於套接字的 API 的原因。ZeroMQ 對開發人員最有趣的特性之一是它使用不同的套接字型別來實現任何訊息傳遞模式。
在討論套接字型別之前,首先了解訊息傳遞模式的概念非常重要。瞭解這些模式將有助於清楚地瞭解 ZeroMQ 中不同套接字的運作方式和使用方法。
訊息傳遞模式
訊息傳遞模式指的是使用 ZeroMQ 套接字在分散式系統不同元件之間交換訊息的特定設計和行為。ZeroMQ 提供了幾種內建的訊息傳遞模式來滿足各種通訊需求。
以下是內建的核心訊息傳遞模式:
- 請求-回覆訊息傳遞模式
- 釋出-訂閱(釋出-訂閱)訊息傳遞模式
- 管道訊息傳遞模式
- 獨佔對訊息傳遞模式
還有更多 ZeroMQ 模式仍處於草案狀態,如下所示:
- 客戶端-伺服器訊息傳遞模式
- 廣播-接收訊息傳遞模式
套接字型別
ZeroMQ 訊息庫提供了幾種套接字型別,這些型別定義了套接字的語義,包括它如何路由訊息和佇列。以下是訊息傳遞模式和屬於這些模式的套接字的列表:
請求-回覆模式
- REQ 套接字
- REP 套接字
- DEALER 套接字
- ROUTER 套接字
釋出-訂閱模式
- PUB 套接字
- SUB 套接字
- XPUB 套接字
- XSUB 套接字
管道模式
- PUSH 套接字
- PULL 套接字
獨佔對模式
- PAIR 套接字
REQ 套接字
REQ 是 ZeroMQ 訊息庫的初始套接字型別之一,屬於請求-回覆模式的同步風格。請求-回覆模式專為各種面向服務的架構而設計。
客戶端使用 REQ 套接字向服務傳送請求並接收回復。此型別的套接字僅允許交替傳送和後續接收呼叫序列。它可以連線到任意數量的 REP 或 Router 套接字型別。
以下是“REQ”套接字特性的摘要
| 特性 | 描述 |
|---|---|
| 相容對等套接字 | REQ、DEALER |
| 方向 | 雙向 |
| 傳送/接收模式 | 接收、傳送、接收、傳送… |
| 傳出路由策略 | 迴圈輪詢 |
| 傳入路由策略 | 最後一個對等節點 |
| 靜默狀態下的操作 | 阻塞 |
REP 套接字
REP 套接字由服務用於接收請求並向客戶端傳送回覆。此套接字型別僅允許交替接收和後續傳送呼叫序列。如果原始請求者不再存在,則會靜默丟棄回覆。
以下是“REP”套接字特性的摘要
| 特性 | 描述 |
|---|---|
| 相容對等套接字 | REQ、DEALER |
| 方向 | 雙向 |
| 傳送/接收模式 | 接收、傳送、接收、傳送… |
| 傳出路由策略 | 迴圈輪詢 |
| 傳入路由策略 | 最後一個對等節點 |
DEALER 套接字
DEALER 套接字型別是一種功能強大且靈活的訊息傳遞模式,用於構建高階通訊模式,例如請求-回覆、釋出-訂閱或其他自定義訊息傳遞方案。它使用“迴圈輪詢”演算法傳送和接收訊息。
此套接字充當客戶端的非同步替換 REQ,這些客戶端與 REP 或 ROUTER 伺服器通訊,並且 DEALER 接收到的訊息是從所有連線的對等節點中公平排隊的。
以下是“Dealer”套接字特性的摘要
| 特性 | 描述 |
|---|---|
| 相容對等套接字 | ROUTER、REP、DEALER |
| 方向 | 雙向 |
| 傳送/接收模式 | 不受限制 |
| 傳出路由策略 | 迴圈輪詢 |
| 傳入路由策略 | 公平排隊 |
| 靜默狀態下的操作 | 阻塞 |
ROUTER 套接字
ROUTER 套接字是用於高階訊息路由模式的套接字型別之一。它允許您將訊息傳送到特定客戶端,從而實現複雜的路由邏輯。ROUTER 充當 REP 的非同步替換,通常用作與 DEALER 客戶端通訊的伺服器的基礎。
它可以使用地址(通常是識別符號字串)將訊息傳送到特定對等節點。
此套接字支援訊息框架,這意味著它可以處理多部分訊息。透過 ROUTER 套接字傳送的每條訊息都可以由多個部分組成,其中第一部分通常用作路由地址,後續部分包含實際資料。
以下是“Dealer”套接字特性的摘要
| 特性 | 描述 |
|---|---|
| 相容對等套接字 | DEALER、REQ、ROUTER |
| 方向 | 雙向 |
| 傳送/接收模式 | 不受限制 |
| 傳出路由策略 | 參見文字 |
| 傳入路由策略 | 公平排隊 |
| 靜默狀態下的操作 | 丟棄(參見文字) |
PUB 套接字
PUB(釋出)是釋出者用於分發資料以實現釋出-訂閱訊息傳遞模式的核心套接字型別之一。它旨在將訊息傳送到多個訂閱者。此套接字型別無法從伺服器接收任何訊息。
以下是“PUB”套接字特性的摘要
| 特性 | 描述 |
|---|---|
| 相容對等套接字 | SUB、XSUB |
| 方向 | 單向 |
| 傳送/接收模式 | 僅傳送 |
| 傳出路由策略 | N/A |
| 傳入路由策略 | 扇出 |
| 靜默狀態下的操作 | 丟棄 |
SUB 套接字
SUB(訂閱)是訂閱者用於訂閱釋出者分發的資料的套接字型別之一。最初,SUB 套接字未訂閱任何訊息。
以下是“SUB”套接字特性的摘要
| 特性 | 描述 |
|---|---|
| 相容對等套接字 | PUB、XPUB |
| 方向 | 單向 |
| 傳送/接收模式 | 僅接收 |
| 傳出路由策略 | 公平排隊 |
| 傳入路由策略 | N/A |
XPUB 套接字
XPUB(擴充套件釋出)套接字是釋出-訂閱訊息傳遞模式中使用的 PUB(釋出)套接字的高階版本。與標準 PUB 套接字相比,XPUB 套接字提供了其他功能。
與 PUB 相同,除了您可以以傳入訊息的形式從對等節點接收訂閱。訂閱訊息是位元組 1(用於訂閱)或位元組 0(用於取消訂閱),後跟訂閱主體。
以下是“XPUB”套接字特性的摘要
| 特性 | 描述 |
|---|---|
| 相容對等套接字 | ZMQ_SUB、ZMQ_XSUB |
| 方向 | 單向 |
| 傳送/接收模式 | 傳送訊息、接收訂閱 |
| 傳出路由策略 | N/A |
| 傳入路由策略 | 扇出 |
| 靜默狀態下的操作 | 丟棄 |
XSUB 套接字
XSUB(擴充套件訂閱)套接字是釋出-訂閱訊息傳遞模式中使用的 SUB(訂閱)套接字的高階版本。與標準 SUB 套接字相比,XSUB 套接字提供了其他功能。
與 SUB 相同,除了您透過向套接字傳送訂閱訊息來訂閱。訂閱訊息是位元組 1(用於訂閱)或位元組 0(用於非訂閱),後跟訂閱主體。
以下是“XSUB”套接字特性的摘要
| 特性 | 描述 |
|---|---|
| 相容對等套接字 | ZMQ_PUB、ZMQ_XPUB |
| 方向 | 單向 |
| 傳送/接收模式 | 接收訊息、傳送訂閱 |
| 傳出路由策略 | 公平排隊 |
| 傳入路由策略 | N/A |
| 靜默狀態下的操作 | 丟棄 |
PUSH 套接字
PUSH 套接字是一種旨在以簡單且可擴充套件的方式使用“迴圈輪詢”演算法將訊息傳送到一個或多個 PULL 套接字的套接字型別。每個連線的 PULL 套接字都使用迴圈輪詢技術從 PUSH 套接字接收訊息,確保工作負載在多個接收器之間均衡。
以下是“PUSH”套接字特性的摘要
| 特性 | 描述 |
|---|---|
| 相容對等套接字 | PULL |
| 方向 | 單向 |
| 傳送/接收模式 | 僅傳送 |
| 傳出路由策略 | N/A |
| 傳入路由策略 | 迴圈輪詢 |
| 靜默狀態下的操作 | 阻塞 |
PULL 套接字
PULL 套接字是一種旨在使用“公平排隊”演算法以簡單且可擴充套件的方式接收訊息的套接字型別。它通常與 PUSH 套接字結合使用,PUSH 套接字將訊息傳送到一個或多個 PULL 套接字。
以下是“PULL”套接字特性的摘要
| 特性 | 描述 |
|---|---|
| 相容對等套接字 | PUSH |
| 方向 | 單向 |
| 傳送/接收模式 | 僅接收 |
| 傳出路由策略 | 公平排隊 |
| 傳入路由策略 | N/A |
| 靜默狀態下的操作 | 阻塞 |
PAIR 套接字
PAIR 套接字是一種屬於“獨佔對模式”的套接字型別。它專為簡單的一對一通訊模式而設計,並允許兩個對等節點之間建立直接連線,為它們提供了一種相互發送訊息的方式。