在我编写的Windows 7 Ultimate x64的UDP组播服务器上进行测试时,我发现了一个非常奇怪的问题。在背景中使用foobar2000播放音乐明显地提高了服务器的传输速率,但也导致了轻微的数据包丢失。关闭音乐会立即将传输速率降至低于可接受的水平,但同时也产生了零数据包丢失。(我有一个客户端应用程序,它与服务器通信并报告未确认的数据包)
我知道Vista及以上版本的操作系统有限制网络和媒体应用程序的行为,以使它们能够良好运行,但我肯定不希望播放音乐会提高网络性能,也不希望关闭音乐会如此显著地降低网络性能。
从代码的角度来解决这个问题,我该怎么做才能让我的服务器应用程序在Vista及以上版本的操作系统上无论是否播放音乐都能一致表现?我当然不希望通知所有客户端如何调整注册表以获得可接受的传输速率,并且也不希望让他们仅仅“播放音乐”以获得可接受的传输速率。我认为应用程序应该像预期的那样“正常工作”。
我认为解决方案涉及到进程优先级,MMCSS或可能是其他一些Windows API调用,以获得正确的结果。
另外,很抱歉但创建可重现的测试用例需要相当大的工作量。限制行为仅在物理网卡驱动程序正在主动工作时才会出现,并且无法使用回环接口进行复现。需要一个客户端实现、一个服务器实现和物理网络硬件来进行测试。