我知道这是个奇怪的问题。因为我通常基于“假设”所有用户的网络连接都很慢来开发应用程序。但是,有没有人认为有一种方法可以通过编程模拟慢速互联网连接,这样我就可以“看到”应用程序在不同“连接速度”下的表现?
我不担心使用哪种语言。我不是在寻找代码示例或其他东西,只是对它背后的逻辑感兴趣。
我知道这是个奇怪的问题。因为我通常基于“假设”所有用户的网络连接都很慢来开发应用程序。但是,有没有人认为有一种方法可以通过编程模拟慢速互联网连接,这样我就可以“看到”应用程序在不同“连接速度”下的表现?
我不担心使用哪种语言。我不是在寻找代码示例或其他东西,只是对它背后的逻辑感兴趣。
当前回答
形成单个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连接都得到这个量。
Explanation: The outer (left) socat listens with the given options on :5555 as a forking server. The first cpipe command in the SYSTEM:... option then throttles data that went into socket :5555 (and comes out of the first, outer socat) to at most 10kByte/s. That data is then forwarding using another socat which connects to localhost:5000 (where the service you want to slow down should be listening). Data from localhost:5000 is then put into the right cpipe command, which (with the given values) throttles it to about 300kB/s.
cpipe的-ngr选项很重要。它导致cpipe非贪婪地从其输入文件描述符中读取。否则,您可能会遇到缓冲区中的数据未被转发并等待回复的情况。
使用更常见的缓冲工具而不是cpipe也是可能的。
(图片来源:这是基于socat文档中Christophe Loor的“双tee”配方)
其他回答
更新这个问题(9年之后)作为我正在寻找的答案,并没有提到:
Firefox也有限制连接速度的预设。在开发人员工具的Network Monitor选项卡中找到它们。默认为“不节流”。
最慢的是GPRS(下载速度:50 Kbps,上传速度:20 Kbps,最小延迟(ms): 500),范围从“良好”和“常规”2G, 3G和4G到DSL和WiFi(下载速度:30Mbps,上传速度:15Mbps,最小延迟(ms): 2)。
详见Dev Tools文档。
使用具有节流功能的web调试代理,如Charles或Fiddler。
你会发现它们在一般的web开发中很有用。主要的区别是Charles是共享软件,而Fiddler是免费的。
如果您正在运行windows, fiddler是一个很好的工具。它有一个模拟调制解调器速度的设置,对于那些想要更多控制的人来说,它有一个插件可以为每个请求添加延迟。
我更喜欢使用这样的工具,而不是在我的应用程序中放置延迟代码,因为它是一个更真实的模拟,而且不需要我设计或编码实际的比特。最好的代码是我不需要写的代码。
这篇文章在Pavel Donchev的博客软件技术展示如何创建自定义模拟速度:限制你的互联网连接速度与提琴手。
从Chrome 38开始,你可以在没有任何插件的情况下做到这一点。只需点击inspect element(或F12热键),然后点击“toggle device mod”,你会看到如下内容:
在许多其他功能中,它允许您模拟特定的互联网连接(3G, GPRS)
另外,对于那些试图限制上传速度的人。遗憾的是,目前这是不可能的。
P.S.2现在你不需要切换任何东西。节流面板可从网络面板。
请注意,在单击No throttling时,您可以创建自定义节流选项。
在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