Sockets ZMQ性能与UDP多播的比较

Sockets ZMQ性能与UDP多播的比较,sockets,tcp,udp,zeromq,multicast,Sockets,Tcp,Udp,Zeromq,Multicast,与“简单”UDP及其多播实现相比,ZMQ的性能是什么(我指发送所有消息时的延迟,许多消息到多个接收器的最大扇出率) 假设我有一个静态的“发送者”,它必须向很多很多的“接收者”发送消息。具有简单TCP传输的发布/订阅模式似乎非常适合处理此类任务-ZMQ不用我们的努力就能完成许多事情,一个ZMQ套接字就足以处理甚至多个连接 但是,我担心的是:ZMQ可能会在后台创建许多TCP套接字,即使我们没有“看到”。这可能会造成延迟。然而,若我创建“公共”UDP套接字并使用多播传输我的所有消息,那个么将只有一个套

与“简单”UDP及其多播实现相比,ZMQ的性能是什么(我指发送所有消息时的延迟,许多消息到多个接收器的最大扇出率)

假设我有一个静态的“发送者”,它必须向很多很多的“接收者”发送消息。具有简单TCP传输的发布/订阅模式似乎非常适合处理此类任务-ZMQ不用我们的努力就能完成许多事情,一个ZMQ套接字就足以处理甚至多个连接


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

我不认为你真的可以用那种方式来比较它们。这取决于什么对你重要

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

  • 使用
    zmq\u代理
    拆分/共享tcp连接的负载
  • 将pub/sub与pgm/epgm一起使用,这只是多播上的一个层(我使用这个)
  • 使用新的收音机碟形模式(使用此模式,您的订阅选项有限)
在幕后,TCP“套接字”由“源”和“目标”标识(简化)-因此,在与每个对等方通信的每个方向都会有一个套接字(有关如何设置/标识套接字的更完整描述,请参阅和)。这与ZMQ无关,ZMQ将按照TCP的要求设置尽可能多的套接字。如果您选择使用多播,您可以对此进行优化,但ZMQ不会通过在后台使用多播来为您进行优化,发布/订阅除外

根据jamesharvey的回答,ZMQ增加了对UDP的支持,因此如果您不需要或不想要TCP的开销,您可以使用它,但是根据您所说的,您希望继续使用TCP,这对于大多数应用程序来说可能是更好的选择(也就是说,当我们设计应用程序时,我们常常无意识地期望TCP的可靠性,并且只有在我们知道我们在做什么的情况下才应该选择UDP)


考虑到这一点,您应该假设ZMQ在底层套接字管理方面的效率与TCP所能实现的效率一样。在您的情况下,对于PUB/SUB,您已经在使用多播了。我认为您很好。

谢谢您的回复。我读了ZGuide,但我想我没有很好地发现它-ZMQ“智能”吗在创建套接字时?我的意思是,如果ZMQ不贪心创建太多的套接字,如果我只需要一个用于ex.多播UDP。