ACE*_*100 3 networking udp tcp winsock delay
请帮忙!我有一个应用程序需要尽可能接近实时处理,并且我一直遇到 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 千兆连接的专用网络的集群上运行中间程序时,我也遇到了同样的事情。在本地运行带有发送和接收程序的中间程序时,我什至会遇到这种延迟。
今天早上我在用 Java 重写服务器时发现了这个问题。我的 Windows 系统时钟的分辨率在 15 到 16 毫秒之间。这意味着每个显示与其传输时间相同毫秒的数据包实际上是在 16 毫秒间隔内以不同的毫秒发送的,但我的时间戳仅每 15 到 16 毫秒增加一次,因此它们看起来相同。
我来这里是为了回答我的问题,我看到了关于提高我的程序优先级的回应。所以我启动了所有三个程序,进入任务管理器,将所有三个程序都提高到“实时”优先级(没有其他进程处于)并运行它们。我得到了相同的 15 到 16 毫秒的间隔。
感谢您的答复。
| 归档时间: |
|
| 查看次数: |
3866 次 |
| 最近记录: |