请帮忙!我有一个需要尽可能接近实时处理的应用程序,我一直遇到 TCP 和 UDP 的这种不寻常的延迟问题。延迟就像发条一样发生,并且总是相同的时间长度(主要是 15 到 16 毫秒)。它发生在传输到任何机器(前夕本地)和任何网络(我们有两个)上。
快速解决问题:
我总是在 C++ 中使用 winsock,在 VS 2008 Pro 中编译,但我已经编写了几个程序来使用 TCP 和 UDP 以各种方式发送和接收。我总是使用以各种语言(MATLAB、C#、C++)编写的中间程序(在本地或远程运行)将信息从一个程序转发到另一个程序。两个 Winsock 程序都在同一台机器上运行,因此它们显示来自同一时钟的 Tx 和 Rx 的时间戳。我一直看到一种模式出现,其中将传输一串数据包,然后在下一次突发之前有大约 15 到 16 毫秒的延迟,尽管没有编程延迟。有时每个数据包之间可能是 15 到 16 毫秒,而不是一连串的数据包。其他时候(很少)我会有不同长度的延迟,比如~47 ms。
我怀疑 winsock 或 NIC 在每次传输之前都在缓冲数据包,但我没有找到任何证据。我有一个千兆连接到一个获得不同级别流量的网络,但是当我在一个集群上运行中间程序时也遇到同样的事情,该集群有一个没有流量的专用网络(至少来自用户)和一个 2 千兆连接。当使用发送和接收程序在本地运行中间程序时,我什至会遇到这种延迟。