代码之家  ›  专栏  ›  技术社区  ›  M. Ryan

如何在iPhone上测试低带宽条件

  •  5
  • M. Ryan  · 技术社区  · 15 年前

    我有一个应用程序可以加载大量二进制数据。我遇到过这样的情况:在加载一些二进制数据的过程中,不稳定的3G连接可能会断断续续地中断,从而导致一些问题。

    我似乎记得adobeflash的测试套件中有带宽模拟器。

    8 回复  |  直到 15 年前
        1
  •  6
  •   Matt Infinite Internship    7 年前

    你可以通过在你的Mac上创建一个无线网络来实现这一点,使用互联网共享,使用防火墙规则降级接口,并将你的iPhone连接到该网络。这实际上可以用来调试任何连接到无线网络的设备。

    使用此技术,您可以模拟极其贫乏、有损或潜在的网络。

    • 限制只能应用于特定连接的设备,而不是影响开发机器的网络连接。
    • 可以编写脚本来模拟快速变化或“突发”网络。
    • 与iOS内置的网络链接调节器不同,您可以在应用程序处于前台时更改设置。

    使用ipfw的 dummeynet

    创建糟糕的Wi-Fi网络

    1. 如果还没有,请插入以太网。
    2. 在“系统首选项”的“共享”窗格中启用Internet共享。选择“Share your connection from:Ethernet”(从以太网共享连接)并选中“Wi-Fi”(Wi-Fi)。
    3. 将您的手机连接到您刚刚创建的网络,并确保您可以浏览网页。
    4. phil@Nebula ~$ sudo sysctl -w net.inet.ip.fw.one_pass=0
      net.inet.ip.fw.one_pass: 0 -> 0
      
    5. 配置iPhone流量将通过的低质量管道(14Kb/s吞吐量,丢包率为1%):

      phil@Nebula ~$ sudo ipfw pipe 1 config bw 14KB/s
      phil@Nebula ~$ sudo ipfw pipe 1 config plr 0.01
      

    下一步 这取决于你是在山狮队还是山狮队,还是小牛队。

    对于山狮(10.8)或以下:

    将数据包路由到管道中,但仅适用于通过机场接口的流量:

    phil@Nebula ~$ sudo ipfw add 10 pipe 1 ip from any to any via en1
    00010 pipe 1 ip from any to any via en1
    

    重要 :如果您使用的是没有物理以太网端口的Air或新款MacBook Pro,则可能会调用AirPort接口 en0 . 替换 en1 具有 恩0 如果是这样的话。

    对于小牛(10.9):

    检查输出 ifconfig 并寻找通过Internet共享创建的桥接接口:

    bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=63<RXCSUM,TXCSUM,TSO4,TSO6>
        ether xx:xx:xx:xx:xx:xx
        Configuration:
                id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
                maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
                root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
                ipfilter disabled flags 0x2
        member: en4 flags=3<LEARNING,DISCOVER>
                ifmaxaddr 0 port 6 priority 0 path cost 0
        nd6 options=1<PERFORMNUD>
        media: <unknown type>
        status: inactive
    bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=3<RXCSUM,TXCSUM>
        ether xx:xx:xx:xx:xx:xx
        inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
        Configuration:
                id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
                maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
                root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
                ipfilter disabled flags 0x2
        member: en1 flags=3<LEARNING,DISCOVER>
                ifmaxaddr 0 port 5 priority 0 path cost 0
        media: autoselect
        status: active
    

    您需要具有IP地址的网桥接口;在大多数情况下,都是这样 bridge100 .

    phil@Nebula ~$ sudo ipfw add 10 pipe 1 ip from any to any via bridge100
    00010 pipe 1 ip from any to any via bridge100
    

    改变 如果它在您的系统上有不同的名称。

    14KB/s 0.01 在上面的步骤5中模拟不同类型的网络。也可以指定 config delay 1000 引入1000ms延迟。看到了吗 the manpage 更多选择。

    为管道添加规则后,可以继续重新配置管道。例如,要模拟接近蜂窝覆盖边缘的情况,请在应用程序运行和连接时发出以下命令(95%数据包丢失):

        phil@Nebula ~$ sudo ipfw pipe 1 config plr 0.95
    

    不用跑了 sudo ipfw add 10 …

    清理

    你可以发布 sudo ipfw delete 10

        2
  •  5
  •   Arrel    15 年前

    将代码保存到计算机上的文件中,并将其命名为“throttling”。然后要运行,只需在终端中输入以下命令,并从以下速度中选择一种: [full|fast|medium|slow|wwdc|off]

    "./throttling medium"
    

    如果你把脚本设置成节流localhost:3000 and stackoverflow.com,然后从浏览器(或iphone模拟器或其他)中的任何一个域加载页面,响应速度会变慢,加载文件也会变慢。这对于测试iphone的连接漏洞来说真的很棒。

    http://gist.github.com/499177

        3
  •  2
  •   progrmr    15 年前

    你也可以用iphone4把两根天线短接在一起;-)

        4
  •  2
  •   Louie    15 年前

    如果你关闭3G并连接wifi,你可以测试很多东西。

    1. 下载数据时切断wifi电源

    2. 下载时重新启动wifi路由器,使手机连接,失去连接,然后重新获得连接。(测试不同的场景)

    快乐的编码!

        5
  •  0
  •   unbeli    15 年前

    嗯,低带宽很简单:关掉Wifi,关掉3G。切断连接也很简单:打开wifi,建立连接,关闭wifi接入点。

        6
  •  0
  •   ExitToShell    15 年前

    我想你可以连接到一个Mac(如果你有一个)设置为WiFi基站(ad-hoc网络)。然后在Mac上设置“dummynet”带宽限制和/或高丢包滤波器。

        7
  •  0
  •   texmex5    15 年前
        8
  •  0
  •   Tamlyn    11 年前