
- ZeroMQ 教程
- ZeroMQ - 首頁
- ZeroMQ - 概述
- ZeroMQ - 安裝
- ZeroMQ - 特性
- ZeroMQ 訊息傳遞
- ZeroMQ - 套接字型別
- ZeroMQ - 通訊模式
- ZeroMQ - 傳輸協議
- ZeroMQ - 訊息幀
- 擴充套件性和效能
- ZeroMQ - 負載均衡
- ZeroMQ - SMP
- ZeroMQ - 多執行緒
- ZeroMQ - 效能注意事項
- ZeroMQ 有用資源
- ZeroMQ - 有用資源
- ZeroMQ - 討論
ZeroMQ - 傳輸協議
ZeroMQ 中的傳輸協議稱為 ZeroMQ 訊息傳輸協議 (ZMTP)。它是一個傳輸層協議,用於在兩個主機之間透過已連線的傳輸層(如傳輸控制協議 (TCP))交換訊息。
TCP 是網際網路協議套件中的主要協議,通常稱為 TCP/IP。TCP 允許我們使用兩個主機或裝置進行連線和交換資料流。

以下是 ZMTP 的一些關鍵特性
- 安全性:ZMTP 支援可擴充套件的安全機制。對等體透過交換資料並保持或關閉連線來協商安全機制和版本。
- 向後相容性:ZMTP 定義了向後相容性的規則。
- 命令和訊息幀:ZMTP 定義了命令和訊息幀的規則。
- 連線元資料:ZMTP 定義了連線元資料的規則。
ZeroMQ 支援多種傳輸協議來管理端點之間的訊息交換。以下是 ZeroMQ 中使用的主要傳輸協議
TCP(傳輸控制協議)
它是最可靠的面向連線的協議,可確保所有訊息按正確的順序傳遞,不會重複。當程序透過網路進行通訊時,通常使用此協議,無論是在同一臺機器上還是在不同的機器上。
繫結示例(伺服器)
// Bind to all available network interfaces on port 5555 socket.bind("tcp://*:5555")
連線示例(客戶端)
// Connect to a remote server on the specified IP and port socket.connect("tcp://192.168.0.1:5555")
優勢
以下是 ZeroMQ 中使用 TCP 的優勢:
- 它在所有平臺和裝置上得到廣泛支援。
- 它具有可靠的訊息傳遞功能。
- 它確保訊息按順序接收。
劣勢
以下是 ZeroMQ 中使用 TCP 的劣勢:
- 與其他協議(如程序間通訊 (IPC))相比,它的延遲更高。
- 它還會因錯誤檢查、流量控制和確認資料包而產生更多開銷。
IPC(程序間通訊)
IPC 允許同一臺機器上的不同程序之間進行通訊。它優於 TCP,因為它透過在作業系統級別直接執行來避免網路堆疊開銷。
繫結示例(伺服器)
// Bind to a local file-based endpoint socket.bind("ipc:///tmp/zeromq-ipc")
連線示例(客戶端)
// Connect to a local endpoint on the same machine socket.connect("ipc:///tmp/zeromq-ipc")
優勢
以下是 ZeroMQ 中使用 IPC 的優勢:
- 它比基於網路的協議(如 TCP)快得多。
- 由於它在同一臺機器上工作,因此沒有網路延遲。
- 它非常適合同一應用程式中不同程序之間的通訊,或同一伺服器上的微服務之間的通訊。
劣勢
以下是 ZeroMQ 中使用 IPC 的劣勢:
- 它僅限於同一臺機器上的程序之間的通訊。
- 它不能用於不同機器之間的通訊
Inproc(程序內)
Inproc 用於同一程序內的執行緒之間的通訊。它是速度最快的 ZeroMQ 傳輸,因為它避免了程序間通訊,僅依賴於同一應用程式內的記憶體傳輸。
繫結示例(執行緒 1)
// Bind to an in-process endpoint socket.bind("inproc://some-endpoint")
連線示例(執行緒 2)
// Connect to the in-process endpoint from another thread socket.connect("inproc://some-endpoint")
優勢
以下是 ZeroMQ 中使用 Inproc 的優勢:
- 它是速度最快的傳輸,因為它不涉及任何網路或程序限制。
- 它支援同一應用程式內執行緒之間的通訊。
劣勢
以下是 ZeroMQ 中使用 Inproc 的劣勢:
- 它不適用於不同程序之間的通訊或跨網路的通訊。
- 它僅限於單個程序內的執行緒間通訊。
PGM/EPGM
PGM/EPGM(實用通用多播/封裝實用通用多播)用於需要可靠多播傳遞的應用程式,例如即時資料傳遞或即時流媒體。這些協議支援多播通訊,其中傳送方同時向多個接收方傳送訊息。
PGM:這是本機多播,需要網路層支援。並非所有網路基礎設施都提供它。
EPGM:ZeroMQ 將 PGM 封裝在 UDP 上(封裝),允許多播在不直接支援 PGM 的網路上工作。
繫結示例(伺服器)
// Bind to a multicast address and port socket.bind("epgm://eth0;239.192.1.1:5555")
連線示例(客戶端)
// Connect to the multi-cast group socket.connect("epgm://239.192.1.1:5555")
優勢
以下是 ZeroMQ 中使用 PGM/EPGM 的優勢:
- 對於一條訊息需要到達多個客戶端(例如,股票行情更新、即時體育比分)的場景,它非常有效。
- 它透過向多個訂閱者傳送一條訊息來最大限度地減少網路頻寬。
劣勢
以下是 ZeroMQ 中使用 PGM/EPGM 的劣勢:
- 它比基於單播的協議(如 TCP)更復雜。
- PGM 的支援範圍不廣,可能需要特殊的網路配置。
UDP(使用者資料報協議)
UDP 是一種無連線且不可靠的協議,它可能比 TCP 快,但不能保證訊息傳遞或排序。雖然 ZeroMQ 不直接支援原始 UDP 作為傳輸(不像 TCP),但可以透過 PGM 或其他協議間接使用它。
TIPC(透明程序間通訊)
TIPC 是一種傳輸協議,旨在在叢集中的節點之間進行高效通訊。它存在於 Linux 作業系統中,並且針對機器叢集內的高速程序間通訊進行了最佳化。
繫結示例(伺服器)
// Bind to a TIPC service and instance socket.bind("tipc://{service,instance}")
連線示例(客戶端)
// Connect to a TIPC service on the cluster socket.connect("tipc://{service,instance}")
優勢
UDP 適用於叢集環境中的通訊和高速傳輸設計,尤其適用於 Linux 叢集。
劣勢
以下是 ZeroMQ 中使用 UDP 的劣勢:
- 它僅限於支援 TIPC 的 Linux 環境。
- 它可能需要額外的網路設定才能有效使用。
總之,每種協議都有其優缺點,您的選擇將取決於系統的架構、效能要求以及應用程式處理的環境。