iOS 如何进行网络测速
點(diǎn)擊上方“程序員大咖”,選擇“置頂公眾號(hào)”
關(guān)鍵時(shí)刻,第一時(shí)間送達(dá)!
對(duì)于網(wǎng)絡(luò)測(cè)速的需求還是比較常見(jiàn)的,比如常見(jiàn)的手機(jī)管家、360 Wi-Fi 等 App 都有網(wǎng)絡(luò)測(cè)速的功能。近期由于業(yè)務(wù)需求也涉及到網(wǎng)絡(luò)測(cè)速這塊內(nèi)容,同時(shí)自己好久沒(méi)更新博客了,所以來(lái)寫(xiě)一下網(wǎng)絡(luò)測(cè)速這塊的一個(gè)簡(jiǎn)單總結(jié)。
什么是網(wǎng)絡(luò)測(cè)速?
其實(shí)聽(tīng)到網(wǎng)絡(luò)測(cè)速這個(gè)需求,第一個(gè)想到的就是 ping,在群里討論的時(shí)候也有同學(xué)說(shuō)到 ping 一下不就可以了嗎?ping 和網(wǎng)速有什么關(guān)聯(lián)和區(qū)別呢?
ping:它的全稱是 Packet Internet Groper,用來(lái)測(cè)試網(wǎng)絡(luò)是否連通,以及響應(yīng)時(shí)間是多少,通常客戶端也都有配置一個(gè)叫做網(wǎng)絡(luò)診斷的功能,其實(shí)就是用到了這個(gè) ping
網(wǎng)速:顧名思義,也就是網(wǎng)絡(luò)速度的意思。稍微專業(yè)來(lái)講就是上傳和下載時(shí),每秒鐘可傳送的 最大數(shù)據(jù)量 ,數(shù)據(jù)量的大小一般用 KB、M來(lái)衡量。
看到上面的解釋,其實(shí)就明白了。ping 測(cè)的是點(diǎn)到點(diǎn)的網(wǎng)絡(luò)延遲,而網(wǎng)速指的是點(diǎn)到點(diǎn)之間單位時(shí)間內(nèi)的傳輸數(shù)據(jù)量。這個(gè)數(shù)據(jù)又可以細(xì)分為上傳數(shù)據(jù)和下載數(shù)據(jù),理論上他們的速度是一致的,但是運(yùn)營(yíng)商會(huì)在其中做一些手腳,導(dǎo)致上行的寬帶一般偏小于下行的寬帶。
我們平時(shí)會(huì)使用 Shadowrocket 等利器來(lái)進(jìn)行翻墻上網(wǎng),這個(gè)軟件會(huì)顯示你 Wi-Fi 和 4G 的流量消耗,同時(shí)會(huì)顯示你每秒鐘你的上行和下行流量是多少。這個(gè)原理其實(shí)也很簡(jiǎn)單,可以直接調(diào)用系統(tǒng)的接口來(lái)獲取網(wǎng)卡的流量數(shù)據(jù)。這里顯示的每秒鐘的上行和下行流量,只能代表此時(shí)的流量消耗,并不能代表當(dāng)前的網(wǎng)速是多少,網(wǎng)速應(yīng)該是充分利用帶寬后,單位時(shí)間內(nèi)可以傳輸?shù)?strong>最大數(shù)據(jù)量
常見(jiàn)的網(wǎng)絡(luò)測(cè)速方案
通過(guò)調(diào)研發(fā)現(xiàn),目前常見(jiàn)的網(wǎng)絡(luò)測(cè)速方案只有兩種:
方案1:通過(guò)上傳和下載數(shù)據(jù)包,使用 TotalSize / TotalTime 來(lái)計(jì)算真實(shí)的上傳和下載速率是多少
方案2:通過(guò)讀取網(wǎng)卡數(shù)據(jù)來(lái)計(jì)算,讀取上一秒的整體流量消耗 T1,然后讀取當(dāng)前的流量消耗 T2,那么 T2 - T1 其實(shí)可以表示為當(dāng)前的一個(gè)網(wǎng)速情況。同時(shí)這個(gè)流量數(shù)據(jù)是可以區(qū)分蜂窩網(wǎng)絡(luò)、Wi-Fi的,也可以區(qū)分哪些是上行流量,那些是下行流量。
兩種方案各有優(yōu)劣,可以在合適的場(chǎng)合來(lái)選擇對(duì)應(yīng)的方案
第一種方案感覺(jué)是比較準(zhǔn)確,這個(gè)時(shí)候是真實(shí)的在下載或上傳數(shù)據(jù),比較充分的利用了當(dāng)前的帶寬,計(jì)算的網(wǎng)速也比較接近真實(shí)的網(wǎng)速值。但是蜂窩網(wǎng)絡(luò)下,會(huì)消耗用戶的少量流量。
第二種方案在下載和上傳東西時(shí),計(jì)算的值和第一種方案比較接近。但是如果當(dāng)前系統(tǒng)內(nèi)沒(méi)有 App 在被使用,處于靜止?fàn)顟B(tài)的話,其實(shí)當(dāng)前讀取的流量值是比較小的,無(wú)法反映出網(wǎng)速情況,但是可以實(shí)時(shí)反映流量消耗狀況。
對(duì)于兩種方案,我寫(xiě)了一個(gè)簡(jiǎn)單的 Demo 放在了https://github.com/joy0304/Joy-Demo/tree/master/LDSpeedTest,這個(gè)只是一個(gè)很粗糙的 Demo,沒(méi)有區(qū)分 Wi-Fi 和 蜂窩網(wǎng)絡(luò),同時(shí)也只計(jì)算了下行的網(wǎng)速,如果要在項(xiàng)目中使用,需要完善后才可以上線使用。
延伸
其實(shí)上面談到的真實(shí)下載或上傳數(shù)據(jù)來(lái)進(jìn)行測(cè)速,這個(gè)只是單個(gè) TCP 連接的情況,如果多個(gè) TCP 連接的話,肯定對(duì)帶寬的一個(gè)利用情況會(huì)比單個(gè) TCP 連接更加高效,測(cè)出來(lái)的網(wǎng)速值也更加準(zhǔn)確。
同時(shí)由于 TCP 和 UDP 協(xié)議本身特點(diǎn)的差異,TCP 測(cè)速和 UDP 測(cè)速的結(jié)果也會(huì)不同,可以根據(jù)業(yè)務(wù)的要求來(lái)選擇恰當(dāng)?shù)姆桨浮?duì)于網(wǎng)絡(luò)測(cè)速,業(yè)界已經(jīng)有很多強(qiáng)大的工具,有興趣的話可以體驗(yàn)下 iperf 等工具。
嗨,遇見(jiàn)你真
作者:Joy___
https://www.jianshu.com/p/9f67b7716b9d
程序員大咖整理發(fā)布,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)
【點(diǎn)擊成為Python大神】
總結(jié)
以上是生活随笔為你收集整理的iOS 如何进行网络测速的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: tomcat集群测试
- 下一篇: win7原版镜像_Intel的7代酷睿C