ZeroMQ - 传输协议



ZeroMQ 中的传输协议称为 ZeroMQ 消息传输协议 (ZMTP)。它是一个传输层协议,用于在两个主机之间通过已连接的传输层(如传输控制协议 (TCP))交换消息。

TCP 是互联网协议套件中的主要协议,通常称为 TCP/IP。TCP 允许我们使用两个主机或设备进行连接和交换数据流。
transport protocol

以下是 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 环境。
  • 它可能需要额外的网络设置才能有效使用。

总之,每种协议都有其优缺点,您的选择将取决于系统的架构、性能要求以及应用程序处理的环境。

广告

© . All rights reserved.