很多人認(rèn)為,TCP協(xié)議有KeepAlive機制,為何基于它的通訊鏈接仍然需要在應(yīng)用層實現(xiàn)額外的心跳保活呢?本文將從移動端IM的角度告訴你,即使使用的是TCP協(xié)議,應(yīng)用層的心跳?;钊耘f必不可少。
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供鎮(zhèn)遠(yuǎn)企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、H5建站、小程序制作等業(yè)務(wù)。10年已為鎮(zhèn)遠(yuǎn)眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進(jìn)行中。
在使用TCP長連接的IM服務(wù)設(shè)計中,往往都會涉及到心跳。心跳一般是指客戶端每隔一定時間向服務(wù)端發(fā)送自定義指令,以判斷雙方是否存活,因其按照一定間隔發(fā)送,類似于心跳,故稱為心跳指令。
TCP是一個基于連接的協(xié)議,其連接狀態(tài)是由一個狀態(tài)機進(jìn)行維護(hù),連接完畢(三次握手)后,雙方都會處于established狀態(tài),這之后的狀態(tài)并不會主動進(jìn)行變化。也就是說,即使上層不進(jìn)行任何調(diào)用,一直使TCP連接空閑,那么它仍然是保持連接的狀態(tài)。這個時候就需要一種機制來檢測TCP連接的狀態(tài),KeepAlive就是背負(fù)這個使命出現(xiàn)的。
那么問題來了,KeepAlive是用來檢測TCP連接狀態(tài)的,那為什么還需要心跳呢?這里就需要考慮一種情況了,假如某臺服務(wù)器因為某些原因?qū)е仑?fù)載超高,CPU100%,無法響應(yīng)任何業(yè)務(wù)需求,但是使用TCP探針仍舊能夠確定連接狀態(tài),這就是典型的連接活著但業(yè)務(wù)提供方已死的狀態(tài),對客戶端而言,這時最好的選擇就是斷線后重新連接其他服務(wù)器,而不是一直認(rèn)為當(dāng)前服務(wù)器是可用狀態(tài),一直向當(dāng)前服務(wù)器發(fā)送些必然后失敗的請求。
從上面我們可以知道,KeepAlive并不適合檢測雙方存活的場景,這種場景還得依賴于應(yīng)用層的心跳。應(yīng)用層的心跳有著更大的靈活性,可以控制檢測時機、間隔和處理流程,甚至可以在心跳包上附帶額外信息。從這個角度而言,應(yīng)用層的心跳的確是最佳實踐。
TCP KeepAlive用于檢測連接的死活,而心跳機制則附帶一個額外的功能:檢測通訊雙方的存活狀態(tài)。
從上面我們可以得出結(jié)論,目前而言,應(yīng)用層心跳的確是檢測連接有效性,雙方是否存活的最佳實踐,那么剩下的問題就是怎么實現(xiàn)。
最簡單粗暴的方法是定時心跳,如每隔30秒心跳一次,15秒內(nèi)沒有收到心跳包則認(rèn)為當(dāng)前連接已失效,斷開連接并進(jìn)行重連。這種做法最直接,實現(xiàn)也簡單。唯一的問題就是耗電和耗流量。以一個協(xié)議包 5 個字節(jié)計算,一天收發(fā) 2880 個心跳包,一個月就是 5 x 2 x 2880 x 30 = 0.8 M 的流量,如果手機上多裝幾個 IM 軟件,每個月光心跳就好幾兆流量沒了,更不用說頻繁的心跳帶來的電量損耗。
既然頻繁心跳會帶來耗電和耗流量的弊端,改進(jìn)的方向自然就是減少心跳頻率,但也不能過于影響連接檢測的實時性?;谶@個需求,一般可以將心跳間隔根據(jù)程序狀態(tài)進(jìn)行調(diào)整,當(dāng)程序在后臺時(這里主要指安卓),盡量拉長心跳間隔,5分鐘、甚至10分鐘都可以。
而當(dāng)App在前臺時則按照原來規(guī)則操作。連接可靠性的判斷也可以放寬,避免一次心跳超時就認(rèn)為連接無效的情況,使用錯誤積累,只在心跳超時n次后才判定當(dāng)前連接不可用。
沒用過環(huán)信,用的是容能云,云通訊PaaS服務(wù)平臺。
服務(wù)功能涵蓋:IM即時通訊、實時音視頻、短信服務(wù)、企業(yè)通訊+辦公、流量服務(wù)、紅包服務(wù)、營銷活動、用戶托管、反垃圾、大數(shù)據(jù)分析、云服務(wù)器、內(nèi)容分發(fā)網(wǎng)絡(luò)CDN、內(nèi)容分發(fā)網(wǎng)絡(luò)CDN、云數(shù)據(jù)庫RDS等等。
開發(fā)文檔和接口接入調(diào)試感覺還是比較簡單快速的!
環(huán)信的即時通訊云最適合你的,Android、iOS、Web三大平臺都支持。實現(xiàn)極其簡單,只需要3步。
第一步:在環(huán)信官網(wǎng)注冊獲得使用碼。
第二步:在環(huán)信官網(wǎng)下載SDK集成,加幾行代碼到App中,調(diào)試并修改UI等配置。
第三步:將擁有IM功能的App上線,就ok了! 加入IM就是這么簡單。
環(huán)信的聊天功能是獨立出來的,開發(fā)者可以直接集成環(huán)信的聊天UI ,集成之后可以直接使用它的所有功能,語音,,表情,共享位置等,快的3天能集成,慢的一個星期左右
都差不多,業(yè)內(nèi)認(rèn)可的基本上融云,環(huán)信這些。真正做起來的目前只有融云了。