gpt4 book ai didi

c++ - Linux 中 C++ Tcp 通信的间歇性延迟

转载 作者:可可西里 更新时间:2023-11-01 02:52:10 24 4
gpt4 key购买 nike

我有一个设备通过 TCP 每 20 毫秒发送一次数据。我有一个连接到此设备的应用程序,启动套接字通信。我的应用程序在一个单独的线程上监听并在数据准备好时尽快读取数据,将数据放在一边,然后由其他线程处理它。设备通过以太网电缆直接连接到计算机。

我看到一个奇怪的问题,我试图理解为什么几乎每分钟一次,从设备接收数据包需要大约 50 毫秒。我做了一个阻塞读取,它会尝试读取一秒钟,并且会在数据准备好时尽快完成,通常它需要大约 20 毫秒,正如我所期望的那样,但就像我之前说的那样,有时它需要 50 毫秒,即使它是非常罕见(3000 分之一)。我注意到的是延迟数据包之后的数据包立即到达,所以这让我觉得网络层有一些延迟。我还检查了数据包的时间戳(由设备提供),它们持续增加 20 毫秒。

当设备直接连接到计算机时,看到这样的延迟是否正常,因为它是 TCP,因此可能需要付出很多努力(CRC 校验、乱序包、重传等)。我仍然想找到一种替代方法来防止这种延迟,而不是接受它可能发生的事实。

任何见解将不胜感激。

最佳答案

这可能是 Nagle's algorithm 的结果它在 TCP/IP 套接字中默认打开。

使用setsockopt()在发送数据的套接字上设置TCP_NODELAY标志以关闭它。

关于c++ - Linux 中 C++ Tcp 通信的间歇性延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20569729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com