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