客戶端需要心跳的原因
對(duì)于客戶端而言,使用 TCP 長(zhǎng)連接來實(shí)現(xiàn)業(yè)務(wù)的最大驅(qū)動(dòng)力在于:
在當(dāng)前連接可用的情況下,每一次請(qǐng)求都只是簡(jiǎn)單的數(shù)據(jù)發(fā)送和接受,免去了 DNS 解析搪柑,
連接建立等時(shí)間,大大加快了請(qǐng)求的速度索烹,同時(shí)也有利于接受服務(wù)器的實(shí)時(shí)消息工碾。
但前提是連接可用。
NAT
大部分移動(dòng)無線網(wǎng)絡(luò)運(yùn)營(yíng)商都在鏈路一段時(shí)間沒有數(shù)據(jù)通訊時(shí)百姓,
會(huì)淘汰 NAT 表中的對(duì)應(yīng)項(xiàng)渊额,造成鏈路中斷(NAT超時(shí)的更多描述見附錄A)
NAT超時(shí)是影響TCP連接壽命的一個(gè)重要因素(尤其是國(guó)內(nèi)),
所以客戶端自動(dòng)測(cè)算NAT超時(shí)時(shí)間垒拢,來動(dòng)態(tài)調(diào)整心跳間隔旬迹,是一個(gè)重要的優(yōu)化點(diǎn)
為什么不用tcp的KeepAlive
KeepAlive 并不適用于檢測(cè)雙方存活的場(chǎng)景,
這種場(chǎng)景還得依賴于應(yīng)用層的心跳求类。應(yīng)用層心跳有著更大的靈活性奔垦,
可以控制檢測(cè)時(shí)機(jī),間隔和處理流程尸疆,甚至可以在心跳包上附帶額外信息椿猎。
從這個(gè)角度而言,應(yīng)用層的心跳的確是最佳實(shí)踐寿弱。
什么是智能心跳犯眠?
智能心跳實(shí)際上就是動(dòng)態(tài)的探測(cè)到最大的NAT超時(shí)時(shí)間,
然后選定合適的心跳間隔區(qū)間去發(fā)送心跳包症革,同時(shí)在網(wǎng)絡(luò)狀況發(fā)生變化的時(shí)候能夠動(dòng)態(tài)的
調(diào)整心跳間隔時(shí)間阔逼;如果心跳間隔不合適,例如心跳間隔過短地沮,
那么可能導(dǎo)致頻繁的喚醒手機(jī)發(fā)送心跳包嗜浮,增加耗電,心跳間隔過長(zhǎng)摩疑,
可能導(dǎo)致這條TCP連接已經(jīng)無效但是無法及時(shí)的檢測(cè)到危融,
只能等待下一個(gè)心跳包發(fā)送的時(shí)候才能感知到
alarm的對(duì)齊喚醒:? ? 6.0時(shí)間對(duì)不上有延遲
jobservice 進(jìn)程保活? 為不是不支持 6.0殺的進(jìn)程組雷袋,
奔辏活是怎么做的
https://blog.csdn.net/xx326664162/article/details/51611625
https://blog.csdn.net/lhd201006/article/details/52702178