以编程方式确定Internet上的速度

时间:2012-02-29 08:53:07

标签: iphone

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

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

3 个答案:

答案 0 :(得分:4)

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

具体来说:如果您测量下载的字节差异和委托调用之间的时间差,那么您可以计算正在进行的速度,以每秒字节数(或其他时间单位)。

答案 1 :(得分:2)

第1步:获取可下载的文件网址,并使用NSURLSession及其方法dataTaskWithUrl对其进行配置。

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

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

第4步:像这样计算速度

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

答案 2 :(得分:0)

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

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

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

有许多方法可以测试“ Internet速度”,没有一个“真实”速度。您可以检查以下标准,以使您更好地了解推荐的方法:

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,该SDK应该可以满足您的要求并符合ITU标准:

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