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

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


当前回答

更新这个问题(9年之后)作为我正在寻找的答案,并没有提到:

Firefox也有限制连接速度的预设。在开发人员工具的Network Monitor选项卡中找到它们。默认为“不节流”。

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

详见Dev Tools文档。

其他回答

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

我更喜欢使用这样的工具,而不是在我的应用程序中放置延迟代码,因为它是一个更真实的模拟,而且不需要我设计或编码实际的比特。最好的代码是我不需要写的代码。

这篇文章在Pavel Donchev的博客软件技术展示如何创建自定义模拟速度:限制你的互联网连接速度与提琴手。

使用TCPMon之类的工具。它可以假装连接很慢。

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

此外,为了在某些*nix上模拟慢速连接,您可以尝试使用ipfw。更多信息由Ben Newman在Quora上的回答提供

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

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

优点是,正如我所写的,它不仅可以模拟不同的网络速度,而且还可以模拟数据包丢失、复制和/或损坏、随机或定义的延迟等,所以除了缓慢的连接之外,您还可以模拟各种性能较差的网络和传输错误。

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

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

对于Linux,下面的论文列表可能会有用:

网络链路模拟器的比较研究(2009) KauNet:一个多功能灵活的仿真系统(2009) 《傻瓜网》(2010) 网络仿真器的测量精度和性能(2015)

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

顺便说一句,对于Windows来说,笨笨是很棒的。我还想补充一点(关于网站),浏览器节流并不是模拟现实网络问题的准确方法(我认为“TKK”评论了上面的一些原因)。

希望这能帮助到一些人!