Tag: 带宽限制

高性能网络应用程序的最佳实践

在测试我在Windows 7 Ultimate x64上编写的UDP多播服务器时,我遇到了一个最奇怪的事情。 在背景中使用foobar2000播放音乐显着提高了服务器的传输速率,同时也导致了轻微的数据包丢失。 关闭音乐会立即将传输速率降低到可接受的水平以下,但也会产生0个数据包丢失。 (我有一个客户端应用程序与服务器通信并报告未确认的数据包) 我知道Vista的(和更高)限制行为使媒体和网络应用程序很好地协同工作,但我当然没想到播放音乐会提高网络性能,也不会让网络性能降低如此显着。 从我的服务器应用程序的代码角度来看 ,我能做些什么,以便无论是否在Vista上播放音乐,它都能始终如一地执行? 我当然希望避免告知我的所有客户如何调整他们的注册表以获得可接受的传输速率,并且还希望避免让他们简单地“播放音乐”以获得可接受的传输速率。 在我看来,应用程序应该“正常工作”。 我认为解决方案涉及过程优先级,MMCSS或可能的其他一些模糊的Windows API调用,以使其在此处执行The Right Thing(TM)。 此外,抱歉,创建一个可重现的测试用例是一项非常重要的工作。 仅当物理NIC的驱动程序正在主动执行工作且无法使用环回接口再现时,才会发生限制行为。 人们需要客户端实现,服务器实现和物理网络硬件来进行测试。

如何在Windows中(在用户模式下)限制应用程序域级别的带宽?

我想发生以下情况: 我的应用程序在Windows机器上运行(称之为应用程序A)。 我可以修改应用程序A的源代码来引入带宽限制。 我希望能够重用我的带宽限制代码并将其放入我拥有的任何其他应用程序中(换句话说,我想尝试在应用程序域级别上限制带宽,以便不必重新考虑因素现有的带宽限制应用程序)。 我想分别限制A的累积上传和下载速度。 例如,如果A分配的最大值为5 Kbps,那么A的所有上传流的上限将达到5 Kbps的累积量。 我的要求: 我不能使用内核模式驱动程序。 我需要在应用程序域级别添加限制。 我试图对此进行研究,特别是在Stack Overflow上,但找不到对我的情况有用的东西: 我已经看到了在Stream对象周围使用ThrottledStream类包装器的示例 ,该对象在使用时会引入限制,但我需要将其置于域级别; 采用这种方法是有问题的,因为它需要我在其他应用程序中重构许多现有代码。 我已经看到这个问题的答案是关于使用Windows过滤平台API的。 不幸的是,我的要求是我绝对不能使用内核模式驱动程序来实现这一点,我的理解是WFP API需要一个。 有没有人知道实现我的特定带宽限制要求的方法,以便在应用程序域级别上限制应用程序?