【问题标题】:How can I determine the quality of a connection in iOS?如何确定 iOS 中的连接质量?
【发布时间】:2011-12-07 17:05:30
【问题描述】:

我熟悉使用 Reachability 来确定 iOS 设备上使用的互联网连接类型(如果有)。不幸的是,这并不是连接质量的良好指标。信号强度低的 Wifi 非常粗略,低于 3 格的 3G 是一场灾难(更不用说只允许 EDGE 连接的网络)。

如何确定我的连接质量,以便帮助我的用户决定他们是否应该在当前连接上下载更大的文件?

【问题讨论】:

    标签: ios


    【解决方案1】:

    一种实用的方法是在应用程序开始时下载一个托管在可靠的全球 CDN 上的中等大小的文件。您事先知道文件大小,您只需要测量它所花费的时间,进行简单的计算,然后您就可以估算出连接的质量。

    例如,jQuery UI 源代码,未经压缩的 gzip 压缩后大约有 90kB。在我的 Mac 上从 http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.js 下载它需要 327 毫秒。所以可以假设我至少有一个可以处理大约 300kB/s 的良好连接(事实上,它可以处理更多)。

    诀窍是在原始文件大小和网络延迟之间找到良好的平衡,因为像这样的小文件永远无法达到完整的下载速度。另一方面,在启动应用程序后立即下载 1MB 肯定会惩罚大多数用户,即使它可以让您更精确地测量连接速度。

    【讨论】:

    • 虽然这可以衡量速度,但并不能真正衡量质量。由于 TCP 的保险,具有大量数据包丢失的 50Mb/s 连接对于下载文件可能很好,但是通过 UDP 的 VoIP 连接会受到骤降、爆裂声和伪影的影响。速度!= 质量。
    • OP 声明用户“应该下载更大的文件”,所以我认为他不处理实时协议。
    • 我只是在说明区别,而不是说您的答案不正确或没有帮助。对不起,如果我不清楚。
    • 没问题,你说得对。不是每个人都知道其中的区别。
    【解决方案2】:

    Cyrille 的回答是一个很好的务实回答,但最终在 mobile 上下文中并不是一个很好的解决方案,原因如下:

    • 它涉及“在您的应用程序开始时”进行测试,我假设他的意思是当您的应用程序启动时。但是您的应用程序可能会执行很长一段时间,可能会进入后台然后回到前台,并且用户一直在随着底层网络性能的变化而改变网络上下文 - 因此初始测试结果可能与“当前" 网络连接的性能。
    • 由于他正确指出的原因,这是在“惩罚”您的用户,让他们在可能已经受到限制的网络条件下下载测试文件。

    您还在原始帖子中建议您希望您的用户决定根据您提供给他们的信息他们是否应该下载。但我认为这不是与移动用户交互的好方法——你不应该要求他们做出复杂的决定。如果绝对必要,仅在您认为文件可能存在问题时询问他们是否要下载该文件,但请保持简单 - “您要下载 XYZ 文件(100 MB)吗?”我个人什至会避免这样做。

    最好的解决方案是监控和调整,而不是下载测试文件。在进行过程中测量连接的性能,跟踪您所拥有的有关连接性能的信息的“新鲜度”,并且仅在基于持续性能的情况下向您的用户展示做出的决定似乎有必要的连接。

    编辑:例如,如果您确定了您认为代表可容忍下载性能的耐心阈值,请跟踪用户执行的每次下载,以确定是否已达到该阈值。这样一来,您将使用真实世界的活动作为“连接质量”的决定因素,而不是通过测试下载阻塞用户连接,这最终是关于连接质量的最终用户体验。如果您决定为用户提供取消下载的功能,那么您就可以很好地“输入”用户的实际耐心阈值,并且可以通过随后在他们开始下载之前为他们提供选择来调整您的功能以适应这种情况。如果您已经切换到这种“确认”模式,但发现文件开始下载速度更快,您可以动态退出确认模式。

    【讨论】:

    • 这里没有答案,只是移动最佳实践的集合。
    • 答案是“监控和适应”,因为移动连接的质量是短暂的。在任何情况下,确定网络连接的质量都相当复杂,但试图在移动设备上在不断变化的条件下这样做,然后为用户做出真正相关的选择,是不切实际的。如果不是这样,iOS 会将其包装起来,并将其作为一个简单的值提供给我们,超出了可达性给我们的范围。将编辑答案以详细说明我所说的监控和适应的含义。
    • 问题是“我如何监控?”
    • 如果我对问题的编辑解释了我的观点,或者您希望我提供更详细的建议,请告诉我。
    • 这里确实没有单一的答案。但这不是那种只有单一答案的问题。这是一个值得讨论的复杂问题,而不是单一的处方。 @Rob Reuss 提供了精彩的讨论。
    【解决方案3】:

    Rob 的回答非常好,但是对于更具体的实现,请从 (https://developer.apple.com/library/archive/samplecode/SimplePing/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000716)Apple's Simple Ping example source code 开始

    为您要监控连接质量的服务器指定域。使用 ping 库定期“ping”它(根据您的 UI 需要说 1 或 10 秒)。衡量获得对您的 ping 的响应(或者如果它永远不会返回)所需的时间,以评估连接质量以与您的用户通信。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-27
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 2010-09-30
      • 2011-05-20
      相关资源
      最近更新 更多