IM推送保障及網路優化詳解(三):如何在弱網環境下優化大資料傳輸

網易雲信發表於2018-06-11
對於移動APP來說,IM功能正變得越來越重要,它能夠建立起人與人之間的連線。社交類產品中,使用者與使用者之間的溝通可以產生出更好的使用者粘性。
在複雜的 Android 生態環境下,多種因素都會造成訊息推送不能及時達到客戶端。另外,不穩定的行動網路也給資料傳輸的速率和可靠性增加了障礙。
本文詳解了網易雲信IM SDK在應對弱網環境、移動端硬體限制以及Android複雜的生態現狀時的探索與心得.如何實現不影響使用者體驗的後臺保活,改善的長連線加推送組合方案,以及在弱網環境大資料傳輸的優化實踐。

相關閱讀推薦

網易雲信即時通訊推送保障及網路優化詳解(一):如何做長連線加推送組合方案

網易雲信即時通訊推送保障及網路優化詳解(二):如何實現不影響使用者體驗的後臺保活

在即時通訊研發當中,音視訊通話對實時性要求很高,但可以容忍一定的丟包,所以選擇UDP私有協議來做為底層的傳輸協議。如果只是普通的IM訊息,對網路情況其實不是太敏感,最多也就是慢一點,菊花轉的久一點。但對於這種視訊電話,如果網路差了,發生了經常性卡頓,或者是延遲很高,影象出現花屏,音視訊不同步了,這個功能其實也就相當於廢棄了。而且,音視訊資料量本身也比較大,在弱網環境下發生問題的概率就更大了。

為了提高弱網下的實時音視訊的通話效果,需要使用相關方案來做QoS保障:主要包括了基於udp協議的擁塞控制、前向糾錯FEC技術及相關的重傳技術。同時網路層需要能夠實時的探測到網路狀態,作為底層調整QoS策略的依據,同時需要回撥上層,來動態調整音視訊的位元速率,做到音視訊位元速率自適應。通過上面的QoS保障,實際測試在60%的隨機丟包弱網環境下,音視訊通話還能夠正常進行。

下面再來看看對於HTTP的優化。圖片語音是IM的必需元素,而且本身資料比較大。在弱網環境下,快速的上傳下載,更少的等待時間可以帶來更好的使用者體驗。

IM推送保障及網路優化詳解(三):如何在弱網環境下優化大資料傳輸

斷點續傳可以減少因網路原因導致的重複傳輸,減少傳輸時間,節省流量。

圖片預載入技術可以根據不用網路情況,在收到訊息後,就載入不同素質的預覽圖片,甚至直接將原圖預載入,做到使用者點開即看。

圖片和語音檔案並沒有通過長連線收發,而是通過HTTP去做上傳下載。傳統上通過HTTP上傳時,檔案會分為一片一片,傳完一片,收到回包,才會穿下一個分片,一直到最終傳輸完成。可以看到,伺服器返回ack這段時間,上傳通道其實是空閒的,如果把這段時間利用起來,可以節約不少上傳時間。Pipeline就是為此而來。通過重疊利用http請求的響應等待時間,加快傳輸速度。使用pipeline,需要修改HttpClient,同時還需要伺服器提供支援。視網路具體情況,使用pipeline後,一次上傳可以減少20%至30%的時間。

常規傳送語音訊息需要這幾步,先錄音,然後計算hash值,然後上傳,上傳完畢後,伺服器計算一下校驗和,通過後語音訊息傳送成功。在前面錄製語音時,網路其實也是空閒的。把這段時間利用起來,則可以減少後面上傳步驟的時間。優化後,流程就變成這樣。在錄製的過程中,每錄完一段,就作為一個分片直接上傳。直到最後錄完,計算好hash,再把最後一個分片帶上hash資訊上傳。這裡除了客戶端的改動,也是需要伺服器支援。伺服器在開始接收時,很多資訊都不明確,需要開闢快取來記錄整次上傳過程。對於比較差的網路,邊錄邊傳的效果會更好,畢竟純語音的位元率並不高,基本都能做到錄完就傳完。



相關文章