sockets - ZMQ 性能与 UDP 多播比较

标签 sockets tcp udp zeromq multicast

与“简单”UDP 及其多播实现相比,ZMQ 的性能(我的意思是发送所有消息时的延迟、许多消息到许多接收者的最大扇出率)是多少?

假设,我有一个静态“发送者”,它必须向许多很多“接收者”发送消息。具有简单 TCP 传输的 PUB/SUB 模式似乎非常适合处理此类任务 - ZMQ 无需我们的努力即可完成许多事情,一个 ZMQ-socket 足以处理甚至多个连接。

但是,我担心的是:ZMQ 可以在后台创建许多 TCP 套接字,即使我们没有“看到”这一点。这可能会造成延迟。但是,如果我创建“通用”UDP 套接字并将通过多播传输所有消息 - 将只有一个套接字(多播),所以我认为延迟问题将得到解决。老实说,我想继续使用 TCP 上的 ZMQ 和 PUB/SUB。我的担忧是否有效?

最佳答案

我认为你不能真正以这种方式比较它们。这取决于什么对您来说很重要。

  • TCP 提供可靠性,作为发送者,您可以通过设置发送时的阻止/重试选项来选择丢失是否比延迟更重要。
  • mcast 可以节省网络带宽,特别是当您的网络有多个网段/路由器时。

zeromq 中的其他选项

  • 使用zmq_proxy来分割/分担 TCP 连接的负载
  • 将 pub/sub 与 pgm/epgm 结合使用,这只是多播之上的一层(我使用这个)
  • 使用新的广播天线模式(这样您的订阅选项就会受到限制)

关于sockets - ZMQ 性能与 UDP 多播比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51270731/

相关文章:

javascript - socket.io 使用 for 循环添加 socket.on 方法

linux - 超过一定大小 (~1450) 的 TCP 消息获取 "stuck"

node.js - NodeJS UDP 多播如何

ruby - 如何使此数组.to_json(Ruby)?它在我的程序中表现不佳,但在irb中工作正常

c++ - 如何从 sk_buff 获取 IP 选项?

python - 如何在 TCP Python 聊天服务器上拥有多个客户端?

c - 无法使用C编程在linux中连接tcp ip - 服务器客户端程序

linux - UDP 接收队列已满?

python - UDP 服务器线程化

Python 原始套接字 (Windows) : Sniffing Ethernet Frames