模拟慢速互联网连接

214

我知道这个问题有点奇怪。通常,我开发应用程序时基于“假设”所有用户都有较慢的互联网连接。但是,是否有人认为可以通过编程方式模拟缓慢的互联网连接,以便我可以“看到”应用程序在不同的“连接速度”下的表现呢?

我不担心使用哪种语言。我也不需要示例代码或其他东西,只对其背后的逻辑感兴趣。

17个回答

169
从Chrome 38开始,您可以在不使用任何插件的情况下完成此操作。只需点击检查元素(或按下F12快捷键),然后点击“切换设备模式”enter image description here,您将看到类似于这样的界面:

enter image description here

除了许多其他功能之外,它还允许您模拟特定的互联网连接(3G,GPRS)。

只有在您打开开发工具侧边栏时,它才能正常工作。

P.S.2 现在您不需要切换任何东西。限速面板直接从网络面板中可用。enter image description here

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

enter image description here


2
现在Chrome Dev Tools可以限制下载和上传速度。但它只能限制Chrome中当前页面的速度,因此您无法使用它来测试其他浏览器中的页面。为了做到这一点,您需要使用其他工具,如Fiddler。 - Leonid Vasilev
5
值得一提的是,目前WebSockets不会被这种方式限制速度:https://bugs.chromium.org/p/chromium/issues/detail?id=423246 - mseddon
上传限速在Chrome的相当几个版本中都没有起作用,包括最新版本(70.0)。在跟踪器上有一个错误报告。 - Matt
1
根据我的经验,导致网页缓慢的最大原因是有线网络服务提供商不稳定的DNS无法解析广告服务器或CDN。有时整个页面会一直保持空白,直到尝试解析成功或超时为止。Chrome能模拟这种情况吗? - StackOverthrow

114
如果您正在运行Windows操作系统,Fiddler是一个很棒的工具。它有一个设置可以模拟调制解调器速度,而对于想要更多控制的人则可以使用插件来添加每个请求的延迟
我更喜欢使用这样的工具,而不是在我的应用程序中编写延迟代码,因为这样更真实,也没有让我设计或编写实际的位。最好的代码是我不必编写的代码。 补充:这篇Pavel Donchev软件技术博客上的文章展示了如何创建自定义模拟速度:使用Fiddler限制您的互联网连接速度

6
你好,我写了一篇关于模拟慢速互联网连接的小指南,可能会很有用:http://www.developertipoftheday.com/2010/12/simulate-slow-internet-connection-in.html。完全公开透明 - 这是我的个人博客,但万一它有所帮助,我非常支持传播Fiddler的好消息 :-) - Alex KeySmith
@SamSaffron,抱歉打扰您,但是您知道其他有助于模拟慢启动的工具吗? - Anish Ramaswamy
@AnishRam 最好使用 dummynet/ipfw,它随着 bsd 和家族一起提供,如 freebsd、osx 等。http://barkingiguana.com/2009/12/04/simulating-slow-or-laggy-network-connections-in-os-x/ - Sam Saffron
在 Fiddler 中,Rules > Performance> Simulate modem speeds。这将“模拟典型的56k调制解调器条件”。如果您是专家,还可以转到 Rules > Customize Rules - Ryan
我们能否得到一个更新的答案?这个插件已经停止维护,似乎无法工作。 - rollsch
显示剩余3条评论

53

1
网络链接调节器由苹果公司维护(因此它是稳定可靠的),但它仅适用于Xcode的模拟器。 - Ben Wheeler
4
@BenWheeler 最近尝试了一下,它肯定已经应用于整个系统,甚至是本地主机。 - aromero
2
我可以确认,网络链接调节器确实应用于整个网络堆栈。 - Fred Vollmer

19

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

apt-get install wondershaper

$ sudo wondershaper {interface} {down} {up}

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

因此,例如,如果您想将eth1接口的带宽限制为256kbps上行和128kbps下行,则:

$ sudo wondershaper eth1 256 128
为了解除限制,
$ sudo wondershaper clear eth1 

13

我曾经使用http://www.netlimiter.com/,它非常好用。不仅可以限制单个进程的速度,还能显示实际传输速率。


大多数其他工具通过人为延迟来提供带宽控制,而NetLimiter似乎并非如此,这是一件好事。然而,最终它是一款商业工具(带有试用版),仅在Windows下可用。 - Aleksander Stelmaczonek

6

有一些TCP代理工具,比如iprelay和Sloppy,可以进行带宽塑形以模拟较慢的连接。您也可以使用IP过滤工具,如ipfw和iptables,进行带宽塑形和模拟数据包丢失。


谢谢,我会查看iprelay和Sloppy joe。 - anon271334
谢谢,ipfw非常好用。这是一个我看到的有用的快速指南:http://barkingiguana.com/2009/12/04/simulating-slow-or-laggy-network-connections-in-os-x/ - Eric Nguyen

4
请使用具有限速功能的Web调试代理,例如Charles或Fiddler。它们通常用于Web开发。主要区别在于,Charles是共享软件,而Fiddler是免费软件。请注意保留HTML标记。

你可以将它作为代理运行。浏览器会自动连接到它,然后它会将请求转发到你的 Web 应用程序。 - Ben M
对于 Fiddler,它具有在浏览器内/外工作的两种模式。 - Ken D

4
您可以使用NetEm (网络仿真)作为代理服务器来模拟许多网络特性(速度、延迟、数据包丢失等)。它使用iproute2包控制网络,并在大多数Linux发行版的内核中启用。
它由tc命令行应用程序(来自iproute2包)控制,但也有一些NetEm的Web界面GUI,例如PHPnetemGUI2
优点是,正如我所写的那样,它不仅可以模拟不同的网络速度,还可以模拟数据包丢失重复和/或损坏随机或定义的延迟等,因此除了慢速连接外,您还可以模拟各种性能差的网络和传输错误。

对于您的应用程序来说,这是完全透明的,您可以配置操作系统将NetEm作为代理服务器使用,因此该计算机的所有连接都将通过它路由。或者您可以仅配置特定应用程序使用该代理。

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


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

4

此外,在某些*nix上模拟缓慢连接,您可以尝试使用ipfw。更多信息请参见Ben Newman在Quora上的回答question


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接