共計(jì) 2257 個(gè)字符,預(yù)計(jì)需要花費(fèi) 6 分鐘才能閱讀完成。
本篇文章為大家展示了 IM SDK 鏈路優(yōu)化策略是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
概述
在即時(shí)通訊領(lǐng)域,要求消息到達(dá)必須保證及時(shí)性。而在當(dāng)前的移動(dòng)互聯(lián)網(wǎng)環(huán)境下,移動(dòng)端設(shè)備面臨諸多問題,尤其是因基站隨著設(shè)備的移動(dòng)而不斷切換,會(huì)導(dǎo)致信號(hào)不穩(wěn)定,從而造成通信質(zhì)量難以保證。所以,在不穩(wěn)定的網(wǎng)絡(luò)狀況下,如何實(shí)現(xiàn)網(wǎng)絡(luò)健康狀態(tài)的探測(cè),及時(shí)重連來保證鏈路的穩(wěn)定性,最終做到網(wǎng)絡(luò)抖動(dòng)情況下用戶無感知,是眾多技術(shù)人員面臨的難題。
復(fù)雜的網(wǎng)絡(luò)狀況
1、 DNS 問題
1)由于 DNS 劫持或故障造成的服務(wù)不可用;
2)由于 DNS 調(diào)度不準(zhǔn)確導(dǎo)致的性能退化。
DNS 劫持或者故障原理
2、弱網(wǎng)問題
1)在電梯、山區(qū)或者偏遠(yuǎn)地區(qū),由于某些區(qū)域基站覆蓋不到,導(dǎo)致的網(wǎng)絡(luò)偏弱;
2)由于其他信號(hào)干擾導(dǎo)致的網(wǎng)絡(luò)偏弱。
解決方法
1、鏈接策略
鏈接策略架構(gòu)
2、HTTPS
HTTPS 即 HTTP 協(xié)議添加了一層 SSL 協(xié)議加密的處理,SSL 證書則遵守 SSL 協(xié)議,由受信任的數(shù)字證書頒發(fā)機(jī)構(gòu) CA,在驗(yàn)證服務(wù)器身份后頒發(fā),簽發(fā)后的證書作為公鑰一般放在服務(wù)器的根目錄下,便于客戶端請(qǐng)求返回給客戶端,私鑰在服務(wù)器的內(nèi)部中心保存,用于解密公鑰。
HTTPS 架構(gòu)圖
安全性:
1)使用 HTTPS 協(xié)議可認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的客戶機(jī)和服務(wù)器;
2) HTTPS 協(xié)議是由 SSL+HTTP 協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,要比 HTTP 協(xié)議安全,可防止數(shù)據(jù)在傳輸過程中被竊取、改變,確保數(shù)據(jù)的完整性;
3) HTTPS 是現(xiàn)行架構(gòu)下最安全的解決方案,雖無法保證絕對(duì)安全,但它大幅增加了中間人攻擊的成本,可解決網(wǎng)絡(luò)劫持相關(guān)問題。
3、HTTPDNS
傳統(tǒng)的 DNS 解析:
DNS 完整的解析流程很長,首先從本地系統(tǒng)緩存中獲取 IP 地址,若無法獲取需到最近的 DNS 服務(wù)器獲取,仍無法獲取的情況下則需要到主域名服務(wù)器獲取,每一層都有緩存,但為了域名解析的實(shí)時(shí)性,每一層緩存都有過期時(shí)間,這種 DNS 解析機(jī)制有幾個(gè)缺點(diǎn):
1) 緩存時(shí)間設(shè)置的長,會(huì)導(dǎo)致域名更新不及時(shí),若設(shè)置的短,大量 DNS 解析請(qǐng)求則會(huì)影響請(qǐng)求速度;
2) 域名劫持,容易被中間人攻擊或被運(yùn)營商劫持。據(jù)統(tǒng)計(jì),把域名解析到第三方 IP 地址,劫持率將高達(dá) 7%;
3) DNS 解析過程不受控制,無法保證解析到最快的 IP;
4) 一次請(qǐng)求只能解析一個(gè)域名。
使用了 HTTPDNS 后:
1) 域名解析與請(qǐng)求分離,所有請(qǐng)求都直接用 IP 地址,無需 DNS 解析,App 定時(shí)請(qǐng)求 HTTPDNS 服務(wù)器更新 IP 地址即可;
2)通過簽名等方式,保證 HTTPDNS 請(qǐng)求的安全,避免被劫持;
3)DNS 解析由自己控制,可以確保返回用戶所在地就近的 IP 地址,或根據(jù)客戶端測(cè)速結(jié)果使用速度最快的 IP;
4)一次請(qǐng)求可以解析多個(gè)域名;
5)安全、精準(zhǔn)的解析結(jié)果:使用 HTTP 協(xié)議訪問服務(wù)端,獲得域名解析結(jié)果,繞過運(yùn)營商的 Local DNS,避免域名劫持;HTTPDNS 能夠直接得到客戶端的出口網(wǎng)關(guān) IP,從而更準(zhǔn)確地判斷客戶端地區(qū)和運(yùn)營商,得到更精準(zhǔn)的解析結(jié)果。
4、復(fù)合鏈接
復(fù)合連接,即多條連接。它解決的是為了多個(gè) IP 地址的連接選取問題,根據(jù)當(dāng)前的地域、網(wǎng)絡(luò)狀況選取速度最快、最優(yōu)的 IP 地址。
我們以域名查詢返回兩個(gè) IP 為例介紹其過程:
1)這兩個(gè) IP 會(huì)按照順序嘗試建立連接,如果第一個(gè) IP 返回失敗,將立即開始連接第二個(gè) IP;
2)如果第一個(gè) IP 率先成功返回,那么第二個(gè) IP 將被加入連接嘗試列表并停止所有嘗試連接;
3)如果第一個(gè) IP 失敗,會(huì)立刻開始第二個(gè) IP 的連接;
4)如果第一個(gè) IP 處于 pending 狀態(tài),那么會(huì)啟動(dòng)一個(gè)定時(shí)器,默認(rèn)延遲 2s 會(huì)發(fā)起第二個(gè) IP 的連接,如果是多個(gè) IP 將會(huì)遞歸連接。
5、智能心跳
影響 TCP 長連接壽命的因素:
1) NAT 超時(shí)
大部分移動(dòng)無線網(wǎng)絡(luò)運(yùn)營商都在鏈路一段時(shí)間后無數(shù)據(jù)通訊的情況下,會(huì)淘汰 NAT 表中的對(duì)應(yīng)項(xiàng),造成鏈路中斷。NAT 超時(shí)是影響 TCP 連接壽命的一個(gè)重要因素 (尤其是國內(nèi)),所以客戶端自動(dòng)測(cè)算 NAT 超時(shí)時(shí)間,來動(dòng)態(tài)調(diào)整心跳間隔,是一個(gè)重要的優(yōu)化點(diǎn)。
2)DHCP 的租期(lease time)
目前測(cè)試發(fā)現(xiàn)安卓系統(tǒng)對(duì) DHCP 的處理有 Bug,DHCP 租期到了不會(huì)主動(dòng)續(xù)約并且會(huì)繼續(xù)使用過期 IP,這個(gè)問題會(huì)造成 TCP 長連接偶然斷連。
3) 網(wǎng)絡(luò)狀態(tài)變化
手機(jī)網(wǎng)絡(luò)和 WIFI 網(wǎng)絡(luò)切換、網(wǎng)絡(luò)斷開和重連等情況會(huì)造成網(wǎng)絡(luò)狀態(tài)的變化,從而導(dǎo)致長連接變?yōu)闊o效連接,需要監(jiān)聽響應(yīng)的網(wǎng)絡(luò)狀態(tài)變化事件,重新建立長連接。
心跳策略:
應(yīng)根據(jù)不同的運(yùn)營商、網(wǎng)絡(luò)狀態(tài),選擇不同的心跳策略。
1)前后臺(tái)區(qū)分處理
為了保證接收消息的及時(shí)性體驗(yàn),當(dāng)應(yīng)用處于前臺(tái)活躍狀態(tài)時(shí),使用固定心跳。應(yīng)用進(jìn)入后臺(tái)(或者前臺(tái)關(guān)屏)時(shí),先用幾次最小心跳維持長鏈接;然后進(jìn)入后臺(tái)自適應(yīng)心跳計(jì)算。前后臺(tái)區(qū)分處理目的是盡量選擇用戶不活躍的時(shí)間段,以減少心跳計(jì)算可能產(chǎn)生的消息延時(shí)收取問題以及應(yīng)用頻繁心跳導(dǎo)致的耗電問題。
2)自適應(yīng)不同的網(wǎng)絡(luò)策略
通常為了保障安全,各個(gè)辦公區(qū)域配置的網(wǎng)絡(luò)策略不盡相同。為了適應(yīng)這種情況,SDK 可智能探測(cè)出心跳的時(shí)間區(qū)間,保證鏈接的穩(wěn)定性。
3)冗余心跳
當(dāng)用戶點(diǎn)亮屏幕的時(shí)候,做一次心跳;切換到前臺(tái)時(shí),做一次心跳;聯(lián)網(wǎng)時(shí)重建信令 TCP,做一次心跳。
上述內(nèi)容就是 IM SDK 鏈路優(yōu)化策略是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。