模拟缓慢的互联网连接

我知道这是一个奇怪的问题。 由于我通常基于“假设”开发应用程序,所有用户的互联网连接速度都很慢。 但是,有没有人认为有一种方法来编程模拟一个慢的互联网连接,所以我可以“看到”应用程序如何在各种“连接速度”下执行?

我不担心使用哪种语言。 而且我不在寻找代码示例或任何东西,只是对它背后的逻辑感兴趣。

如果你正在运行Windows, 提琴手是一个伟大的工具。 它有一个模拟调制解调器速度的设置,对于想要更多控制的人来说,有一个插件可以为每个请求添加延迟 。

我更喜欢使用这样的工具将延迟代码放在我的应用程序中,因为它是一个更真实的模拟,也不会让我devise或编码实际位。 最好的代码是我不必写的代码。

添加 :Pavel Donchev的Software Technologies博客文章显示了如何创build自定义的模拟速度: 限制与Fiddler的Internet连接速度 。

Chrome 38开始,您可以不使用任何插件。 只需点击检查元素(或F12热键),然后点击“切换设备mod” 在这里输入图像说明 你会看到这样的东西:

在这里输入图像说明

在许多其他function,它允许你模拟特定的互联网连接(3G,GPRS)

PS的人试图限制上传速度。 可悲的是在目前这是不可能的。

PS2现在你不需要切换任何东西。 节stream面板在networking面板上可用。 在这里输入图像说明

请注意,点击No throttling时,您可以创build您的自定义限制选项。

在这里输入图像说明

Googlebuild议 :

  • networking链路调节器在OSX上
  • 在Windows上笨拙
  • Linux上的Dummynet

我使用的是http://www.netlimiter.com/ ,它工作得很好。 不仅限制单个stream程的速度,而且还显示实际的传输速率。

有TCP代理,如iprelay和Sloppy,做带宽整形来模拟慢连接。 您还可以使用IP过滤工具(如ipfw和iptables)进行带宽整形和模拟丢包。

在Linux机器上,你可以使用wondershaper

 apt-get install wondershaper $ sudo wondershaper {interface} {down} {up} 

{down}和{up}是以kpbs为单位的带宽

因此,例如,如果要将接口eth1的带宽限制为256kbps上行链路和128kbps下行链路,

 $ sudo wondershaper eth1 256 128 

要清除限制,

 $ sudo wondershaper clear eth1 

您可以尝试Dummynet ,它可以模拟队列和带宽限制,延迟,数据包丢失和多path效应

另外,为了模拟一些* nixes上的慢速连接,你可以尝试使用ipfw 。 Ben Newman在这个Quora 问题上的答案提供了更多的信息

使用带有限制function的Webdebugging代理,如Charles或Fiddler 。

一般来说,你会发现他们有用的web开发。 Charles的主要区别是共享软件,而Fiddler是免费的。

使用像TCPMon这样的工具。 它可以伪造一个缓慢的连接。

基本上,你要求它完全一样的东西,它只是将完全相同的请求转发给真实的服务器,然后延迟响应只有设定的字节数。

从10.10开始的Mac OSX有一个名为Murus Firewall的应用程序,它可以作为ipfw的替代品。

它对于系统范围或域特定的节stream非常有效。 我只是能够使用它来下载速度在300Kbps和30Mbps之间,以testingstream式video播放器如何调整。

还有另外一个叫做WIPFW的工具 – http://wipfw.sourceforge.net/

这是一个古老的学校,但你可以用它来模拟一个较慢的连接。 它是基于Windows的,该工具允许pipe理员监视路由器从某台机器获得的stream量,或者转发多lessWWWstream量。

您可以使用NetEm(networking仿真)作为代理服务器来模拟许多networking特性 (速度,延迟,丢包等)。 它使用iproute2软件包控制networking,并在大多数Linux发行版的内核中启用。

它由tc命令行应用程序(来自iproute2包)控制,但也有一些NetEm的web界面GUI,例如PHPnetemGUI2 。

其优点是,正如我写的,它不仅可以模拟不同的networking速度,而且还可以模拟丢包,重复和/或损坏,随机或定义的延迟等,以便模拟各种性能不佳的networking。

对于您的应用程序来说,它是绝对透明的,您可以将操作系统configuration为使用NetEm代理服务器,因此来自该计算机的所有连接都将通过NetEm。 或者,您可以只configuration您的应用程序使用它作为代理。

我一直在使用它来testing各种仿真性能较差的networking上的Android应用程序的性能。