【问题标题】:Determine the speed on internet programmatically以编程方式确定互联网速度
【发布时间】:2012-03-18 18:11:44
【问题描述】:

我知道您可以通过可达性检查您是否已连接到互联网。但是有没有办法确定该连接的速度? 我正在尝试分别计算上传速度和下载速度。

如何以编程方式确定互联网速度?

【问题讨论】:

  • 它没有回答您的问题,但顺便说一句,在我看来,应用程序应该能够支持实践中可用的任何速度,因为人们将同一设备连接到多个互联网资源(WiFi在家或工作,3G 外出);甚至在实践中使用单一来源的速度也会迅速变化。
  • 现在是否可以测量互联网速度或 wifi 强度。

标签: iphone


【解决方案1】:

如果您使用NSURLConnection 获取大文件(例如,1 MB 或更大),您可以使用delegate 来跟踪中间下载进度。

具体来说:如果您测量下载字节数的差异以及调用代理之间的时间差异,那么您可以计算以每秒字节数(或其他时间单位)为单位的持续速度。

【讨论】:

  • 注意:如果您的应用尝试在我的 3G 连接上下载 >1MB,只是为了确定它是 slooooow,我会不高兴(不过我的运营商可能会)。事实上,我会非常不高兴你无意义地蚕食我微薄的数据限制;如果你反复这样做,甚至更多。 (如果您正在测量应用实际需要的数据传输 - 这需要一段时间,但我会管理)
  • 哦,当然。但这可以提供持续的正常下载速度,例如,在应用程序执行其日常业务的过程中继续进行。或者,如果应用程序是一个网络测试应用程序,那么最终用户会运行它,因为它知道它将通过网络连接请求一个大文件。所以我认为,如果使用得当、智能地使用它,即使是对于蜂窝连接,它仍然是一种有用的方法......
  • 是否可以在不下载任何文件的情况下确定网速?
  • 也许是通过 ping/ICMP? stackoverflow.com/questions/4575537/…
【解决方案2】:

步骤 1: 获取可下载文件的 url 并使用 NSURLSession 及其方法 dataTaskWithUrl 配置它。

第 2 步:在您的控制器中集成 NSURLSessionDelegate, NSURLSessionDataDelegate 方法。

第 3 步: 取两个 CFAbsoluteTime 变量,它存储 starTime 并在 didReceiveData: 委托方法中分配 CFAbsoluteTimeGetCurrent() 和第二个 stopTime

第四步:这样算速度

  CFAbsoluteTime elapsedTime = stopTime - startTime;
  float speedOfConnection = elapsedTime != 0 ? [data length] / (stopTime - startTime) / 1024.0 / 1024.0 : -1;

【讨论】:

    【解决方案3】:

    计算下载/上传速度的主要方法有两种。

    被动测试 - 这是通过使用 iOS 方法完成的,这些方法为您提供当前传输的字节。您经常轮询它并通过传输的字节数除以时间来计算速度。这种方法将为您提供更接近实际用户体验的速度。但是,它不会为您提供容量测量 - 即连接的预期容量是多少。例如,对于固定网络,ISP 通常会根据速度销售套餐 - 例如。 100 Mbit 包,1 Gbit 包。如果您想查看该 ISP 是否提供速度,那么被动方法不是方法!由于用户并非一直在使用全部容量,因此速度会低得多。

    主动测试 - 这种方法需要下载和上传数据到远程服务器以获得下载/上传速度和延迟。这是以前的评论者在这里建议的。重要的方法是实现是要使用单线程还是多线程进行测试。单线程不会使互联网连接饱和,也不会显示连接的最大容量。

    测试“网速”的方法有很多,没有一种“真正的”速度。您可以查看以下标准,让您更了解推荐的方式:

    https://itu.int/en/ITU-T/C-I/Pages/IM/Internet-speed.aspx

    https://itu.int/itu-t/recommendations/rec.aspx?rec=q.3960

    https://itu.int/ITU-T/recommendations/rec.aspx?rec=14125

    https://tools.ietf.org/pdf/rfc6349.pdf

    您还可以使用我们的 iOS SDK,它应该可以满足您的需求并符合 ITU 标准:

    https://github.com/speedchecker/speedchecker-sdk-ios

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多