當前位置:編程學習大全網 - 源碼下載 - IM即時通訊開發如何實現Android版智能心跳機制

IM即時通訊開發如何實現Android版智能心跳機制

IM即時通訊開發如何實現Android版智能心跳機制。

大體思路

a)延遲心跳測試法:這是測試結果準確的前提保障,我們認為長連接建立後連續三次成功的短心跳就可以很大程度的保證下壹次心跳環境是正常的。

b)成功壹次認定,失敗連續累積認定:成功是絕對的,連續失敗多次才可能是失敗。

c)臨界值避免:我們使用比計算出的心跳稍微小壹點的值做為穩定心跳避免臨界值。

d)動態調整:即使在壹次完整的智能心跳計算過程中,我們沒有找到最好的值,我們還有機會來進行校正。

方案需考慮到影響連接壽命的思素

在Android下,不管是GCM,還是微信,都是通過TCP長連接來進行消息收發的,TCP長連接存活,消息收發就及時,所以要對影響TCP連接壽命的因素進行研究。

1、NAT超時

大部分移動無線網絡運營商都在鏈路壹段時間沒有數據通訊時,會淘汰 NAT 表中的對應項,造成鏈路中斷(NAT超時的更多描述見附錄9.1)。NAT超時是影響TCP連接壽命的壹個重要因素(尤其是國內),所以客戶端自動測算NAT超時時間,來動態調整心跳間隔,是壹個重要的優化點。

2、DHCP的租期 (lease time)

目前測試發現安卓系統對DHCP的處理有Bug,DHCP租期到了不會主動續約並且會繼續使用過期IP,這個問題會造成TCP長連接偶然的斷連。(租期問題的具體描述見附錄9.2)。

3、網絡狀態變化

手機網絡和WIFI網絡切換、網絡斷開和連上等情況有網絡狀態的變化,也會使長連接變為無效連接,需要監聽響應的網絡狀態變化事件,重新建立Push長連接。

心跳範圍選擇

1、前後臺區分處理:

為了保證微信收消息及時性的體驗,當微信處於前臺活躍狀態時,使用固定心跳。微信進入後臺(或者前臺關屏)時,先用幾次最小心跳維持長鏈接。然後進入後臺自適應心跳計算。這樣做的目的是盡量選擇用戶不活躍的時間段,來減少心跳計算可能產生的消息不及時收取影響。

2、後臺自適應心跳選擇區間:

可根據自身產品的特點選擇合適的心跳範圍。

自適應心跳算法量化描述

因為每個網絡的NAT時間可能不壹致。所以需要區分計算,數據網絡按subType做關鍵字,WIFI按WIFI名做關鍵字。對穩定的網絡,因為NAT老化時間的存在,在自適應計算態的時候,暫設計以下步驟在當前心跳區間逼近出最大可用的心跳。 即時通訊聊天軟件app開發可以加蔚可雲的v:weikeyun24咨詢

a)變量說明:

[MinHeart,MaxHeart]——心跳可選區間。

successHeart——當前成功心跳,初始為MinHeart

curHeart——當前心跳初始值為successHeart

heartStep——心跳增加步長

successStep——穩定期後的探測步長

經過該流程,會找到必然使心跳失敗的curHeart(或者MaxHeart),為了保險起見,我們選擇比前壹個成功值稍微小壹點的值作為後臺穩定期的心跳間隔。

影響手機網絡測試的因素太多,為了盡量保證測試結果的可靠性,我們使用延遲心跳測試法。在我們重新建立TCP連接後,先使用?短心跳連續成功三次,我們才認為網絡相對穩定,可以使用curHeart進行壹次心跳測試。圖4-2顯示了壹次有效心跳測試過程。圖4-3顯示了在沒有達到穩定網絡環境時,我們會壹直使用固定短心跳直到滿足三次連續短心跳成功。

使用延遲心跳測試的好處是,可以剔除偶然失敗,和網絡變化較大的情況(如地鐵),使測試結果相對可靠(五次延遲測試確定結論)。同時在網絡波動較大的情況,使用短心跳,保證收取消息相對及時。

c)運行時的動態調整策略(已經按測算心跳穩定值後)

NAT超時值算出來後,在維持心跳的過程中的策略。

-?無網絡、網絡時好時壞、偶然失敗、NAT超時變小:

在後臺穩定期發生心跳發生失敗後,我們使用延遲心跳測試法測試五次。如果有壹次成功,則保持當前心跳值不變;如果五次測試全失敗,重新計算合理心跳值。該過程如圖4-4所示,有壹點需要註意,每個新建的長連接需要先用短心跳成功維持3次後才用successHeart進行心跳。

NAT超時變大:

以周為周期,每周三將後臺穩定態調至自適應計算態,使用心跳延遲法往後探測心跳間隔。

-?successHeart是NAT超時臨界值:

因為我們現在選擇的是壹個比successHeart稍小的值作為穩定值,所以在計算過程中可以避開臨界值。當運營商在我們後臺穩定期將NAT超時調整為我們當前計算值,那麽由於我們每周會去向下探索,所以下壹周探測時也可以及時調整正確。

d)冗余Sync和心跳

在用戶的壹些主動操作以及聯網狀態改變時,增加冗余Sync和心跳,確保及時收到消息。

1、當用戶點亮屏幕的時候,做壹次心跳。

2、當微信切換到前臺時,做壹次Sync。

3、聯網時重建信令TCP,做壹次Sync。

可能存在的風險及預防措施

DHCP租期因素:

1、問題:根據目前的測試結果顯示,安卓不續約到期的IP Bug,會導致TCP連接在不確定的時間點失效,從而會導致壹次心跳失敗。

2、預防:統計後臺穩定期的心跳成功率,上報給後臺。後臺可以按地區分網絡監控這個指標的波動,並且後臺可以根據不同的波動,動態調整某區域特定網絡下可選的心跳區間。

NAT超時介紹

因為 IP v4 的 IP 量有限,運營商分配給手機終端的 IP 是運營商內網的 IP,手機要連接 Internet,就需要通過運營商的網關做壹個網絡地址轉換(Network Address Translation,NAT)。簡單的說運營商的網關需要維護壹個外網 IP、端口到內網 IP、端口的對應關系,以確保內網的手機可以跟 Internet 的服務器通訊。

  • 上一篇:在97年到2000年的賽車類遊戲有哪些?很急!
  • 下一篇:殺鴨殺鵝規則
  • copyright 2024編程學習大全網