模拟慢速Internet连接

时间:2010-08-21 03:58:55

标签: performance networking

我知道这是一个奇怪的问题。因为我通常根据所有用户都有慢速互联网连接的“假设”开发应用程序。但是,是否有人认为有一种方法可以以编程方式模拟慢速互联网连接,因此我可以“看到”应用程序在各种“连接速度”下的运行情况?

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

17 个答案:

答案 0 :(得分:148)

Chrome 38 开始,您可以在没有任何插件的情况下执行此操作。只需单击inspect元素(或 F12 热键),然后单击“切换设备模块”enter image description here,您将看到如下内容:

enter image description here

在许多其他功能中,它允许您模拟特定的互联网连接(3G,GPRS)

P.S。适用于尝试限制上传速度的用户。可悲的是,目前这是不可能的。

P.S.2 现在您不需要切换任何内容。可以从网络面板上获得限制面板。 enter image description here

请注意,点击无限制时,您可以创建自定义限制选项。

enter image description here

答案 1 :(得分:102)

如果您正在运行Windows,fiddler是一个很棒的工具。它有一个模拟调制解调器速度的设置,对于想要更多控制权的人有一个plugin to add latency to each request

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

ADDED :Pavel Donchev在软件技术博客上的这篇文章展示了如何创建自定义模拟速度:Limiting your Internet connection speed with Fiddler

答案 2 :(得分:39)

Google recommends

答案 3 :(得分:11)

我使用的是http://www.netlimiter.com/,效果非常好。不仅限制单个流程的速度,还显示实际的传输速率。

答案 4 :(得分:10)

在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 

答案 5 :(得分:6)

有一些TCP代理,比如iprelay和Sloppy,它们进行带宽整形以模拟慢速连接。您还可以使用ipfw和iptables等IP过滤工具进行带宽整形和模拟丢包。

答案 6 :(得分:4)

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

答案 7 :(得分:4)

此外,为了模拟某些* nix上的慢速连接,您可以尝试使用ipfw。 Ben Newman关于此Quora question

的回答提供了更多信息

答案 8 :(得分:3)

使用具有限制功能的Web调试代理,例如Charles或Fiddler

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

答案 9 :(得分:2)

使用TCPMon之类的工具。它可以伪造一个缓慢的连接。

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

答案 10 :(得分:1)

10.10以来的Mac OSX有一个名为Murus Firewall的应用程序,它作为pf的GUI,替换为ipfw。

它适用于系统范围或特定于域的限制。我只能用它来下载300Kbps到30Mbps的下载速度来测试流式视频播放器的调整方式。

答案 11 :(得分:1)

您可以使用NetEm (Network Emulation)作为代理服务器来模拟许多网络特征(速度,延迟,数据包丢失等)。它使用iproute2包控制网络,并在大多数Linux发行版的内核中启用它。

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

优点是,正如我所写,它不仅可以模拟不同的网络速度,还可以模拟丢包,重复和/或损坏,随机或定义的延迟等,因此您可以模拟各种不良执行网络。

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

我一直在用它来测试各种模拟的低性能网络上的Android应用程序的性能。

答案 12 :(得分:1)

实际上,可以通过UNIX方式从socatcpipe的双对组装一个形成单个TCP连接的常见情况,如下所示:

socat TCP-LISTEN:5555,reuseaddr,reuseport,fork SYSTEM:'cpipe -ngr -b 1 -s 10 | socat - "TCP:localhost:5000" | cpipe -ngr -b 1 -s 300'

这模拟了您的服务在:5000处从 的带宽约300kB / s的连接,并监听了{{1 }}用于传入连接。 注意事项:请注意,此每个连接,因此每个单独的TCP连接都会获得此金额。

说明: 外部(左侧):5555使用socat上的给定选项作为派生服务器进行侦听。 :5555选项中的第一个cpipe命令然后将进入套接字:5555(并从第一个外部SYSTEM:...中出来)的数据限制为最多10KB /秒然后,该数据将使用连接到socat的另一个socat转发(您要放慢速度的服务应该正在监听)。然后,将来自{em> localhost:5000的数据放入正确的localhost:5000命令中,该命令(使用给定值)会将其限制为大约300kB / s。

cpipe-ngr的选项很重要。它使cpipe从其输入文件描述符中非贪婪地读取。否则,您可能会陷入缓冲区中的数据无法转发并等待答复的状态。

也可能使用更常用的cpipe工具代替buffer

(信用:这是根据cpipe文档中Christophe Loor的“双发”食谱制作的)

答案 13 :(得分:0)

还有另一种名为WIPFW的工具 - http://wipfw.sourceforge.net/

这是一个古老的学校,但您可以使用它来模拟较慢的连接。它是基于Windows的,该工具允许管理员监控路由器从某台计算机获得的流量,或者它转发的WWW流量。例如。

答案 14 :(得分:0)

更新此问题(被问到9年后)时,我没有提到我正在寻找的答案:

Firefox还具有用于限制连接速度的预设。在开发人员工具的网络监视器标签中找到它们。默认值为“无限制”。

最慢的是 GPRS 下载速度:50 Kbps,上传速度:20 Kbps,最小延迟(毫秒):500 ),范围为“良好”和“常规” '2G,3G和4G到DSL和 WiFi 下载速度:30Mbps,上传速度:15Mbps,最小延迟(ms):2 )。

Dev Tools docs中的更多内容。

答案 15 :(得分:0)

对于Linux,以下文件列表可能会有用:

Dummynet而言,就个人而言,我发现NetEm是最适合我的用例的;我通常对延迟的影响感兴趣,而不是对带宽的影响(即WiFi连接问题)感兴趣,并且它非常容易模拟随机数据包丢失/损坏等。它也很容易访问且免费(与基于硬件的{ {3}}。

在旁注中,对于Windows,Linktropy非常棒。我还想补充一点,(关于网站)浏览器限制不是模拟现实网络问题的准确方法(我认为“ TKK”评论了上述原因中的一些原因)。

希望这对某人有帮助!

答案 16 :(得分:0)

有一种简单实用的方法可以做到,无需任何应用程序或代码。只需使用移动热点连接到互联网。将热点(电话)从连接的设备上移开以模拟较慢的网络。 ?