【发布时间】:2020-05-16 15:41:06
【问题描述】:
我使用带有ZMQ_DONTWAIT 标志的ZMQ_PUSH 套接字发送消息。每条消息间隔 300 毫秒(所以我严重怀疑我的线程调度是否如此关闭)。然而,有时会有几条(到目前为止最多 7 条)消息被打包到同一个 TCP 帧中,但我在 tcpdump 中看不到任何重新传输或重新连接。
为什么会这样?我如何确定我的消息何时发送?
【问题讨论】:
-
en.wikipedia.org/wiki/Nagle%27s_algorithm 通常假设 tcp 每帧一条消息也是错误的,因为它是基于连接的协议,而不是基于消息的
-
好吧,但我想我可以假设每 2.1 秒至少有 1 个 TCP 帧
-
我最好的猜测是 ZMQ 中的一个错误,这不会是第一次。
-
TCP 是一种流协议,在应用层没有帧/数据包/消息。任意数量的
send()调用可以对应于任意数量的recv()调用,并且您不能假设您的数据以您发送的顺序可靠传输。 TCP 通常不保证任何有限的传输时间,因此如果底层连接碰巧很慢和/或不可靠,则可能需要相当长的时间才能到达您的数据