如果服務端不迴心跳,客戶端體驗會比較差!

如果回的話,單機在上百萬或者千萬的連接下,性能影響有多大?


客戶端發心跳給伺服器端的設計,一般是因為NAT(+埠映射)引起的。因為客戶端一般在運營商那裡拿到的是私網地址(尤其是移動客戶),所以要由客戶端主動發起連接,伺服器端才能連上客戶端。如果某個TCP連接長期沒有數據包,那麼運營商會釋放出埠號來給其他用戶使用。

所以一般設計客戶端呼叫伺服器的週期,要依照運營商的埠釋放週期來。要稍稍小於更新釋放週期。蘋果剛進中國的時候,曾經用大量用戶做樣本,測試出了各個網段用戶的埠釋放週期,然後改進了他們的通知推送設置。對於蘋果app,客戶端不需要週期性心跳發給伺服器端,可以由蘋果的通知觸發用戶手動重新發起連接。

安卓就不得不各自設計了。現在有一個統一推送聯盟希望能把通知集合起來,不知道進展怎麼樣。


需要


需要回。

確實很多伺服器最大的流量就在心跳包上。


肯定需要ACK keepalive啊...要不然弄這個幹啥...


需要回。

因為客戶端也需要根據心跳來判斷跟伺服器的連接是否已斷開。

你可以在iOS上試試中途開啟飛行模式。


需要回,心跳頻率不用太高。支持單機上百萬千萬連接的問題其實跟心跳沒太大關係。如果已經支持了千萬長連接,心跳對此影響不大


推薦閱讀:
相關文章