当使用pgm和epgm协议并在同一个多播数据包中发送多个更新时,ZeroMQ似乎将聚合服务器端的数据。例如,如果我调用zmq_msg_send 10,000次并查看我在tcpdump中发送的数据,我可以看到我发送的消息少于10,000个。这是预期的吗?有没有办法配置ZeroMQ不这样做?
答案 0 :(得分:1)
是的,这是预期的行为。来自ZeroMQ FAQ(http://www.zeromq.org/area:faq)的引用:
ØMQ以机会主义的方式批量处理邮件。它不是等待预定义数量的消息和/或预定义的时间间隔,而是一次性发送当前可用的所有消息。想象一下,网络接口卡忙着发送数据。一旦准备好发送更多数据,它就会向ØMQ询问新消息。 ØMQ发送当前可用的所有消息。它是否会损害批处理中第一条消息的延迟?不会。因为网卡很忙,所以不会提前发送消息。相反,后续消息的延迟将得到改善,因为向卡发送单个批处理比发送大量小消息更快。另一方面,如果网卡不忙,则直接发送消息而不等待以下消息。因此,它将具有最佳的延迟。
无法配置此功能。并且没有理由,因为ZeroMQ批次不会增加延迟。