客戶端發送TCP心跳,伺服器需要回嗎?
如果服務端不迴心跳,客戶端體驗會比較差!
如果回的話,單機在上百萬或者千萬的連接下,性能影響有多大?
客戶端發心跳給伺服器端的設計,一般是因為NAT(+埠映射)引起的。因為客戶端一般在運營商那裡拿到的是私網地址(尤其是移動客戶),所以要由客戶端主動發起連接,伺服器端才能連上客戶端。如果某個TCP連接長期沒有數據包,那麼運營商會釋放出埠號來給其他用戶使用。
所以一般設計客戶端呼叫伺服器的週期,要依照運營商的埠釋放週期來。要稍稍小於更新釋放週期。蘋果剛進中國的時候,曾經用大量用戶做樣本,測試出了各個網段用戶的埠釋放週期,然後改進了他們的通知推送設置。對於蘋果app,客戶端不需要週期性心跳發給伺服器端,可以由蘋果的通知觸發用戶手動重新發起連接。
安卓就不得不各自設計了。現在有一個統一推送聯盟希望能把通知集合起來,不知道進展怎麼樣。
需要
需要回。
確實很多伺服器最大的流量就在心跳包上。
肯定需要ACK keepalive啊...要不然弄這個幹啥...
需要回。
因為客戶端也需要根據心跳來判斷跟伺服器的連接是否已斷開。
你可以在iOS上試試中途開啟飛行模式。
需要回,心跳頻率不用太高。支持單機上百萬千萬連接的問題其實跟心跳沒太大關係。如果已經支持了千萬長連接,心跳對此影響不大
推薦閱讀: