【问题标题】:Simulating Slow Internet Connection [closed]模拟慢速互联网连接[关闭]
【发布时间】:2011-04-01 23:07:58
【问题描述】:

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

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

【问题讨论】:

    标签: performance networking


    【解决方案1】:

    Chrome 38 开始,您无需任何插件即可完成此操作。只需单击检查元素(或 F12 热键),然后单击“toggle device mod”,您将看到如下内容:

    在许多其他功能中,它允许您模拟特定的互联网连接(3G、GPRS)

    P.S.适用于试图限制上传速度的人。遗憾的是,目前这是不可能的。

    P.S.2 现在您无需切换任何内容。限制面板可直接从网络面板获得。

    请注意,点击无限制时,您可以创建自定义限制选项。

    【讨论】:

    • 现在 Chrome 开发工具节流限制了下载和上传速度。但它仅限于 Chrome 中的当前页面,因此您不能使用它在其他浏览器中测试您的页面。为此,您需要使用 Fiddler 等其他工具。
    • 值得一提的是,目前 WebSockets 并没有这样限制:bugs.chromium.org/p/chromium/issues/detail?id=423246
    • 上传限制在很多版本的 Chrome 中都不起作用,包括最新的 (70.0)。有一个bug report on the tracker
    • 根据我的经验,网络速度缓慢的最大原因是有线 ISP 的不稳定 DNS 无法解析广告服务器或 CDN。有时整个页面保持空白,直到尝试解决它们成功或超时。 Chrome 可以模拟这个吗?
    【解决方案2】:

    如果您正在运行 Windows,fiddler 是一个很棒的工具。它有一个模拟调制解调器速度的设置,对于想要更多控制的人有一个plugin to add latency to each request

    我更喜欢使用这样的工具来将延迟代码放入我的应用程序中,因为它是一种更逼真的模拟,并且不会让我设计或编写实际位。最好的代码是我不必编写的代码。

    添加:Pavel Donchev 关于软件技术的博客中的这篇文章展示了如何创建自定义模拟速度:Limiting your Internet connection speed with Fiddler

    【讨论】:

    • 嗨,我写了一个关于模拟慢速互联网连接的小指南,可能会有用:developertipoftheday.com/2010/12/… - 完全披露 - 这是我自己的博客,但以防万一它对我有帮助传播提琴手的好消息:-)
    • 这种提琴手方法的问题是延迟模拟不准确,它在错误的协议级别上运行,因此您无法正确模拟慢启动。
    • @SamSaffron,很抱歉挖掘出这样的旧帖子,但是,您知道其他有助于模拟慢启动的工具吗?
    • @AnishRam 最好的办法是使用 bsd 和家庭、freebsd、osx 等附带的 dummynet/ipfw barkingiguana.com/2009/12/04/…
    • @AnishRam 另见 netem linuxfoundation.org/collaborate/workgroups/networking/netem 可以使用 iproute2 模拟一堆条件。
    【解决方案3】:

    Google recommends:

    【讨论】:

    • Network Link Conditioner 由 Apple 维护(因此稳定可靠),但仅适用于 Xcode 的模拟器。
    • @BenWheeler 最近试过了,肯定是在系统范围内应用的,甚至是本地主机
    • 我可以确认 Network Link Conditioner 确实应用于整个网络堆栈。
    【解决方案4】:

    在 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】:

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

      【讨论】:

      • 大多数其他工具通过人工延迟提供带宽控制,而 netlimiter 似乎并非如此,这是一件好事。但是,最终它是一个商业工具(带有试用版),并且只能在 Windows 下使用。
      【解决方案6】:

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

      【讨论】:

      【解决方案7】:

      你可以试试Dummynet,它可以模拟队列和带宽限制、延迟、丢包和多路径效应

      【讨论】:

        【解决方案8】:

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

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

        【讨论】:

        • 您将其作为代理运行。浏览器会自动连接到它,并将请求转发到您的网络应用程序。
        • 对于 Fiddler,它有两种模式可以在浏览器内部/外部工作。
        【解决方案9】:

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

        【讨论】:

          【解决方案10】:

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

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

          优势在于,正如我所写,它不仅可以模拟不同的网络速度,还可以模拟例如丢包重复和/或损坏随机或定义延迟等,因此除了连接速度慢之外,您还可以模拟各种性能不佳的网络和传输错误。

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

          我一直在使用它来测试 Android 应用在各种模拟性能不佳的网络上的性能。

          【讨论】:

            【解决方案11】:

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

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

            【讨论】:

              【解决方案12】:

              形成单个 TCP 连接的一种常见情况实际上可以像这样以 UNIX 方式从 socatcpipe 的双对组合而成:

              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:5000socat 转发该数据(您想要放慢速度的服务应该正在侦听)。 来自 localhost:5000 的数据然后被放入正确的 cpipe 命令中,该命令(使用给定值)将其限制为大约 300kB/s。

              -ngrcpipe 的选项很重要。它使 cpipe 从其输入文件描述符中非贪婪地读取。否则,您可能会卡在缓冲区中的数据未转发并等待回复。

              使用更常见的buffer 工具代替cpipe 也是可能的。

              (致谢:这是基于 socat 文档中 Christophe Loor 的“双三通”配方)

              【讨论】:

                【解决方案13】:

                Mac OSX 自 10.10 起有一个名为 Murus Firewall 的应用程序,它充当 pf 的 GUI,替代 ipfw。

                它非常适用于系统范围或特定域的限制。我只是能够使用它在 300Kbps 和 30Mbps 之间滑动下载速度,以测试流媒体视频播放器的调整方式。

                【讨论】:

                  【解决方案14】:

                  更新这个(被问到 9 年后)因为没有提到我正在寻找的答案:

                  Firefox 还具有限制连接速度的预设。在开发者工具的 Network Monitor 标签中找到它们。默认为“无节流”。

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

                  更多内容请关注Dev Tools docs

                  【讨论】:

                    【解决方案15】:

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

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

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

                    希望这对某人有所帮助!

                    【讨论】:

                      【解决方案16】:

                      还有另一个工具叫做 WIPFW - http://wipfw.sourceforge.net/

                      它有点老派,但您可以使用它来模拟较慢的连接。它是基于 Windows 的,该工具允许管理员监控路由器从某台机器获得多少流量,或者它正在转发多少 WWW 流量。

                      【讨论】:

                        【解决方案17】:

                        有一种简单实用的方法可以做到这一点,无需任何应用程序或代码。只需使用移动热点连接到互联网。继续将热点(手机)从连接的设备上移开,以模拟较慢的网络。 ?

                        【讨论】:

                        • 这种方法测量难度大,不适用于远程服务器
                        猜你喜欢
                        • 1970-01-01
                        • 2020-09-19
                        • 2020-11-05
                        • 1970-01-01
                        • 2010-11-08
                        • 1970-01-01
                        • 1970-01-01
                        • 2017-03-14
                        • 2017-07-13
                        相关资源
                        最近更新 更多