我知道这是一个奇怪的问题。因为我通常根据所有用户都有慢速互联网连接的“假设”开发应用程序。但是,是否有人认为有一种方法可以以编程方式模拟慢速互联网连接,因此我可以“看到”应用程序在各种“连接速度”下的运行情况?
我并不担心使用哪种语言。而且我不是在寻找代码示例或任何东西,只是对它背后的逻辑感兴趣。
答案 0 :(得分:148)
从 Chrome 38 开始,您可以在没有任何插件的情况下执行此操作。只需单击inspect元素(或 F12 热键),然后单击“切换设备模块”,您将看到如下内容:
在许多其他功能中,它允许您模拟特定的互联网连接(3G,GPRS)
P.S。适用于尝试限制上传速度的用户。可悲的是,目前这是不可能的。
P.S.2 现在您不需要切换任何内容。可以从网络面板上获得限制面板。
请注意,点击无限制时,您可以创建自定义限制选项。
答案 1 :(得分:102)
如果您正在运行Windows,fiddler是一个很棒的工具。它有一个模拟调制解调器速度的设置,对于想要更多控制权的人有一个plugin to add latency to each request。
我更喜欢使用这样的工具将延迟代码放在我的应用程序中,因为它是一个更加逼真的模拟,并且不会让我设计或编码实际位。最好的代码是我不必编写的代码。
ADDED :Pavel Donchev在软件技术博客上的这篇文章展示了如何创建自定义模拟速度:Limiting your Internet connection speed with Fiddler。
答案 2 :(得分:39)
答案 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)
答案 8 :(得分:3)
使用具有限制功能的Web调试代理,例如Charles或Fiddler。
一般来说,你会发现它们是有用的网页开发。主要区别在于Charles是共享软件,而Fiddler是免费的。
答案 9 :(得分:2)
使用TCPMon之类的工具。它可以伪造一个缓慢的连接。
基本上,你要求它完全相同的东西,它只是将完全相同的请求转发给真实服务器,然后只用设定的字节数来延迟响应。
答案 10 :(得分:1)
它适用于系统范围或特定于域的限制。我只能用它来下载300Kbps到30Mbps的下载速度来测试流式视频播放器的调整方式。
答案 11 :(得分:1)
您可以使用NetEm (Network Emulation)作为代理服务器来模拟许多网络特征(速度,延迟,数据包丢失等)。它使用iproute2包控制网络,并在大多数Linux发行版的内核中启用它。
它由tc
命令行应用程序(来自 iproute2 包)控制,但也有一些NetEm的Web界面GUI,例如PHPnetemGUI2。
优点是,正如我所写,它不仅可以模拟不同的网络速度,还可以模拟丢包,重复和/或损坏,随机或定义的延迟等,因此您可以模拟各种不良执行网络。
对于您的应用程序,它绝对透明,您可以将操作系统配置为使用NetEm代理服务器,因此来自该计算机的所有连接都将通过NetEm。或者,您只能配置应用程序以将其用作代理。
我一直在用它来测试各种模拟的低性能网络上的Android应用程序的性能。
答案 12 :(得分:1)
实际上,可以通过UNIX方式从socat
和cpipe
的双对组装一个形成单个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)
有一种简单实用的方法可以做到,无需任何应用程序或代码。只需使用移动热点连接到互联网。将热点(电话)从连接的设备上移开以模拟较慢的网络。 ?