【发布时间】:2011-04-01 23:07:58
【问题描述】:
我知道这是一个奇怪的问题。因为我通常基于所有用户的互联网连接速度较慢的“假设”来开发应用程序。但是,有没有人认为有一种方法可以以编程方式模拟慢速互联网连接,这样我就可以“看到”应用程序在各种“连接速度”下的表现?
我不担心使用哪种语言。而且我不是在寻找代码示例或任何东西,只是对它背后的逻辑感兴趣。
【问题讨论】:
我知道这是一个奇怪的问题。因为我通常基于所有用户的互联网连接速度较慢的“假设”来开发应用程序。但是,有没有人认为有一种方法可以以编程方式模拟慢速互联网连接,这样我就可以“看到”应用程序在各种“连接速度”下的表现?
我不担心使用哪种语言。而且我不是在寻找代码示例或任何东西,只是对它背后的逻辑感兴趣。
【问题讨论】:
【讨论】:
如果您正在运行 Windows,fiddler 是一个很棒的工具。它有一个模拟调制解调器速度的设置,对于想要更多控制的人有一个plugin to add latency to each request。
我更喜欢使用这样的工具来将延迟代码放入我的应用程序中,因为它是一种更逼真的模拟,并且不会让我设计或编写实际位。最好的代码是我不必编写的代码。
添加:Pavel Donchev 关于软件技术的博客中的这篇文章展示了如何创建自定义模拟速度:Limiting your Internet connection speed with Fiddler。
【讨论】:
【讨论】:
在 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
【讨论】:
我使用的是http://www.netlimiter.com/,效果很好。不仅限制单个进程的速度,还显示实际传输速率。
【讨论】:
有一些 TCP 代理,例如 iprelay 和 Sloppy,它们会进行带宽整形以模拟慢速连接。您还可以使用 ipfw 和 iptables 等 IP 过滤工具进行带宽整形和模拟数据包丢失。
【讨论】:
你可以试试Dummynet,它可以模拟队列和带宽限制、延迟、丢包和多路径效应
【讨论】:
使用具有限制功能的 Web 调试代理,例如 Charles 或 Fiddler。
一般来说,您会发现它们对 Web 开发很有用。主要区别在于 Charles 是共享软件,而 Fiddler 是免费的。
【讨论】:
您可以将NetEm (Network Emulation) 用作代理服务器来模拟许多网络特征(速度、延迟、丢包等)。它使用iproute2 包控制网络,并在大多数Linux 发行版的内核中启用。
它由tc 命令行应用程序(来自iproute2 包)控制,但也有一些用于NetEm 的Web 界面GUI,例如PHPnetemGUI2。
优势在于,正如我所写,它不仅可以模拟不同的网络速度,还可以模拟例如丢包、重复和/或损坏、随机或定义延迟等,因此除了连接速度慢之外,您还可以模拟各种性能不佳的网络和传输错误。
对于您的应用程序,它是绝对透明的,您可以将操作系统配置为使用 NetEm 作为代理服务器,因此来自该机器的所有连接都将通过它进行路由。或者,您可以仅配置特定应用程序以使用该代理。
我一直在使用它来测试 Android 应用在各种模拟性能不佳的网络上的性能。
【讨论】:
使用TCPMon 之类的工具。它可以假装慢速连接。
基本上,您向它请求完全相同的东西,它只是将完全相同的请求转发到真实服务器,然后仅以设定的字节数延迟响应。
【讨论】:
形成单个 TCP 连接的一种常见情况实际上可以像这样以 UNIX 方式从 socat 和 cpipe 的双对组合而成:
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 上的给定选项作为分叉服务器进行侦听。然后SYSTEM:... 选项中的第一个cpipe 命令将进入 套接字:5555(并从第一个外部socat 出来)的数据限制为最多10kByte/s。然后使用另一个连接到localhost:5000 的socat 转发该数据(您想要放慢速度的服务应该正在侦听)。 来自 localhost:5000 的数据然后被放入正确的 cpipe 命令中,该命令(使用给定值)将其限制为大约 300kB/s。
-ngr 到 cpipe 的选项很重要。它使 cpipe 从其输入文件描述符中非贪婪地读取。否则,您可能会卡在缓冲区中的数据未转发并等待回复。
使用更常见的buffer 工具代替cpipe 也是可能的。
(致谢:这是基于 socat 文档中 Christophe Loor 的“双三通”配方)
【讨论】:
Mac OSX 自 10.10 起有一个名为 Murus Firewall 的应用程序,它充当 pf 的 GUI,替代 ipfw。
它非常适用于系统范围或特定域的限制。我只是能够使用它在 300Kbps 和 30Mbps 之间滑动下载速度,以测试流媒体视频播放器的调整方式。
【讨论】:
更新这个(被问到 9 年后)因为没有提到我正在寻找的答案:
Firefox 还具有限制连接速度的预设。在开发者工具的 Network Monitor 标签中找到它们。默认为“无节流”。
最慢的是 GPRS(下载速度:50 Kbps,上传速度:20 Kbps,最小延迟(毫秒):500),范围从“良好”和“正常” ' 2G、3G 和 4G 转 DSL 和 WiFi(下载速度:30Mbps,上传速度:15Mbps,最小延迟(毫秒):2)。
更多内容请关注Dev Tools docs。
【讨论】:
对于 Linux,以下论文列表可能有用:
就个人而言,虽然Dummynet 很好,但我发现NetEm 是最适合我的用例的;我通常对延迟的影响感兴趣,而不是带宽(即 WiFi 连接问题),而且模拟随机数据包丢失/损坏等非常容易。它也非常容易访问,而且免费(不像基于硬件的@ 987654327@).
附带说明,对于 Windows,Clumsy 很棒。我还想补充一点(关于网站)浏览器节流不是模拟现实网络问题的准确方法(我认为“TKK”评论了上述一些原因)。
希望这对某人有所帮助!
【讨论】:
还有另一个工具叫做 WIPFW - http://wipfw.sourceforge.net/
它有点老派,但您可以使用它来模拟较慢的连接。它是基于 Windows 的,该工具允许管理员监控路由器从某台机器获得多少流量,或者它正在转发多少 WWW 流量。
【讨论】:
有一种简单实用的方法可以做到这一点,无需任何应用程序或代码。只需使用移动热点连接到互联网。继续将热点(手机)从连接的设备上移开,以模拟较慢的网络。 ?
【讨论】: