模拟缓慢的Internet连接


188

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

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

Answers:


109

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

我更喜欢使用这样的工具在我的应用程序中放置等待时间代码,因为这是更现实的模拟,并且不让我设计或编写实际位。最好的代码是我不必编写的代码。

新增:Pavel Donchev在Software Technologies上的博客上的这篇文章展示了如何创建自定义的模拟速度:使用Fiddler限制Internet连接速度


6
嗨,我写了一点指南来模拟可能会有用的慢速互联网连接:developertipoftheday.com/2010/12/…-完全公开-这是我自己的博客,但以防万一它对我有所帮助提琴手的好话语:-)
Alex KeySmith 2011年

这种提琴手方法的问题在于,延迟模拟不准确,它在错误的协议级别上运行,因此您无法正确地模拟缓慢启动。
Sam Saffron'3

@SamSaffron,很抱歉像这样挖出一个旧帖子,但是,您知道有其他工具可以用来模拟慢速启动吗?
Anish Ramaswamy

@AnishRam最好的选择是使用bsd及其家族,freebsd,osx等随附的dummynet / ipfwbarkingiguana.com/2009/12/04/…–
Sam Saffron

@AnishRam另请参见netem linuxfoundation.org/collaborate/workgroups/networking/netem可以使用iproute2模拟一系列条件。
Philip Rieck

154

Chrome 38开始,您无需任何插件即可执行此操作。只需单击检查元素(或F12热键),然后单击“切换设备模块” 在此处输入图片说明,您将看到类似以下内容:

在此处输入图片说明

它具有许多其他功能,可让您模拟特定的Internet连接(3G,GPRS)

PS,适合尝试限制上传速度的用户。可悲的是,目前无法实现。

PS2现在您无需切换任何内容。可以从网络面板上直接使用节流面板。在此处输入图片说明

请注意,在单击“ 不限制”时,您可以创建自定义限制选项。

在此处输入图片说明


2
现在,Chrome开发者工具限制了下载和上传速度。但这仅将其限制为Chrome中的当前页面,因此您不能使用它在其他浏览器中测试您的页面。为此,您需要使用其他工具,例如Fiddler。
Leonid Vasilev

3
值得一提的是,当前WebSocket并没有以这种方式受到限制:bugs.chromium.org/p/chromium/issues/detail?id=423246
mseddon

在许多版本的Chrome(包括最新版本(70.0))中,上传限制功能均无效。跟踪器上有一个错误报告
马特

以我的经验,网络缓慢的最大原因是电缆ISP的不稳定DNS无法解析广告服务器或CDN。有时,整个页面会一直空白,直到尝试解决问题或超时为止。Chrome可以模拟吗?
StackOverthrow


14

在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 

13

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


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

6

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


谢谢,我来看看iprelay和Sloppy joe。

谢谢,ipfw很棒。这是我认为有帮助的快速指南:barkingiguana.com/2009/12/04/…–
Eric Nguyen

4

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


4

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

通常,您会发现它们对Web开发有用。主要区别在于Charles是共享软件,而Fiddler是免费的。


您将其作为代理运行。浏览器会自动连接到它,并将请求转发到您的Web应用程序。
Ben M

对于Fiddler,它在浏览器内部/外部都有两种模式。
肯D

4

另外,为了模拟某些* nixes上的慢速连接,您可以尝试使用ipfw。本纽曼(Ben Newman)对这个Quora 问题的回答提供了更多信息


2

使用类似TCPMon的工具。它可以伪造慢速连接。

基本上,您请求它的是完全相同的东西,它只是将完全相同的请求转发到真实服务器,然后仅以设置的字节数延迟响应。


2

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

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

优点是,正如我所写,它不仅可以模拟不同的网络速度,而且还可以模拟例如数据包丢失,重复和/或损坏,随机或定义的延迟等,因此您可以模拟各种性能较差的网络。

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

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


1

从10.10开始的Mac OSX拥有一个名为Murus Firewall的应用程序,该应用程序充当pf(ipfw的替代品)的GUI。

它对于系统范围或特定于域的节流非常有效。我只是可以使用它在300Kbps和30Mbps之间滑动下载速度,以测试流式视频播放器的调整方式。


0

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

它有点老,但是您可以使用它来模拟较慢的连接。它是基于Windows的,例如,该工具允许管理员监视路由器从特定计算机上接收的流量或转发的WWW流量。


0

由于有人在寻找我未找到答案的问题,因此对此进行了更新(被询问9年后):

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

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

开发工具文档中的更多内容。


0

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

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

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

希望这对某人有帮助!


0

实际上,可以通过UNIX的双对socatcpipeUNIX方式组装形成单个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'

这模拟约为300KB / s的带宽连接您的服务:5000,并约10KB / S和侦听:5555传入连接。注意:请注意,此每个连接,因此每个单独的TCP连接都会获得此数量。

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

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

也可以使用更通用的buffer工具代替cpipe

(信用:这是基于克里斯多夫·洛尔(Christophe Loor)从socat文档中获得的“双发”配方)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.