ZeroMQ - 传输协议
ZeroMQ 中的传输协议称为 ZeroMQ 消息传输协议 (ZMTP)。它是一种传输层协议,用于通过连接的传输层(如传输控制协议 (TCP))在两个主机之间交换消息。
TCP 是 Internet 协议套件中的主要协议,通常称为 TCP/IP。TCP 允许我们使用两个主机或设备连接和交换数据流。

以下是 ZMTP 的一些主要功能:
- 安全性:ZMTP 支持可扩展的安全机制。对等方通过交换数据并保持或关闭连接来就安全机制和版本达成一致。
- 向后互操作性:ZMTP 定义向后互操作性的规则。
- 命令和消息框架:ZMTP 定义命令和消息框架的规则。
- 连接元数据:ZMTP 定义连接元数据的规则。
ZeroMQ 支持多种传输协议,用于管理端点之间的消息交换。以下是 ZeroMQ 中使用的主要传输协议:
TCP(传输控制协议)
它是最可靠的面向连接的协议,可确保所有消息都以正确的顺序传递而不会重复。这通常用于进程通过网络进行通信时,无论是在同一台机器上还是在不同的机器上。
绑定示例(服务器):
// 绑定到端口 5555 上的所有可用网络接口 socket.bind("tcp://*:5555")
连接示例(客户端):
// 连接到指定 IP 和端口上的远程服务器 socket.connect("tcp://192.168.0.1:5555")
优点
以下是在 ZeroMQ 中使用 TCP 的优点 −
- 它在所有平台上都得到广泛支持,并且设备。
- 它具有可靠的消息传递功能。
- 它确保按顺序接收消息。
缺点
以下是在 ZeroMQ − 中使用 TCP 的缺点
- 与其他协议(如进程间通信 (IPC))相比,它的延迟更高。
- 它还具有更多来自错误检查、流量控制和确认数据包的开销。
IPC(进程间通信)
IPC 允许同一台机器上的不同进程之间进行通信。它比 TCP 更好,因为它通过直接在操作系统级别操作来避免网络堆栈开销。
绑定示例(服务器):
// 绑定到本地基于文件的端点 socket.bind("ipc:///tmp/zeromq-ipc")
连接示例(客户端):
// 连接到同一台机器上的本地端点 socket.connect("ipc:///tmp/zeromq-ipc")
优点
以下是在 ZeroMQ 中使用 IPC 的优点 −
- 它比 TCP 等基于网络的协议快得多。
- 由于它在同一台机器上工作,因此没有网络延迟。
- 它是同一应用程序中不同进程或同一服务器上微服务之间通信的理想选择。
缺点
以下是在 ZeroMQ 中使用 IPC 的缺点 −
- 它受到限制同一台机器上的进程间通信。
- 不能用于不同机器间的通信
Inproc(进程内)
Inproc 用于同一进程内线程间的通信。它是最快的 ZeroMQ 传输,因为它避免了进程间通信,仅依赖于同一应用程序内的内存传输。
绑定示例(线程 1):
// 绑定到进程内端点 socket.bind("inproc://some-endpoint")
连接示例(线程 2):
// 从另一个线程连接到进程内端点 socket.connect("inproc://some-endpoint")
优点
以下是在 ZeroMQ 中使用 Inproc 的优点 −
- 它是最快的传输,因为它不涉及任何网络或进程限制。
- 它支持同一应用程序内的线程之间的通信。
缺点
以下是在 ZeroMQ − 中使用 Inproc 的缺点
- 它不适合不同进程之间或跨网络的通信。
- 它仅限于单个进程内的线程间通信。
PGM/EPGM
PGM/EPGM(实用通用多播/封装实用通用多播)用于需要可靠多播传送的应用程序,例如实时数据传送或直播。这些协议支持多播通信,其中发送方同时向多个接收方发送消息。
PGM:这是本机多播,需要网络层支持。它并非在所有网络基础设施上都可用。
EPGM:ZeroMQ 将 PGM 包装在 UDP 上(封装),允许多播在未直接支持 PGM 的网络上工作。
Bind Example (Server):
// 绑定到多播地址和端口 socket.bind("epgm://eth0;239.192.1.1:5555")
连接示例(客户端):
// 连接到多播组 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操作系统中,并针对机器集群内的高速进程间通信进行了优化。
绑定示例(服务器):
// 绑定到TIPC服务和实例 socket.bind("tipc://{service,instance}")
连接示例(客户端):
// 连接到集群上的TIPC服务 socket.connect("tipc://{service,instance}")
优点
UDP对于集群环境中的通信和高速传输设计非常有效,尤其是对于Linux集群。
缺点
以下是使用UDP的缺点ZeroMQ 中的 UDP −
- 它仅限于具有 TIPC 支持的 Linux 环境。
- 它可能需要额外的网络设置才能有效使用。
总之,每种协议都有其优点和缺点,您的选择将取决于您的系统架构、性能要求以及应用程序处理的环境。