在以TCP為連線方式的伺服器中,為什麼在服務端設計當中需要考慮心跳?

時間 2021-05-11 21:14:46

1樓:唐正超

1,tcp鏈結非正常斷斷開,tcp協議本身並不能立刻感知,最常見的就是你網線掉了,過會你自己重新插上,哎,還能用!2,tcp本身就有keepalive的機制,但是tcp本身的keepalive是在核心檢測的,這就有一些問題,例如你的電腦cpu占用滿了,程式卡死,但是tcp的keepalive在系統層面檢測仍然是存活的,而這時候就需要應用層的心跳方案來保活。

2樓:新道

我有乙個疑問,非阻塞socket中,都會有迴圈recv()的操作,可以通過該函式返回值判斷是否掉線,為什麼一定要有心跳包呢? 不解,求大神指點

3樓:魯哈花

短鏈結的話可以設計專門的心跳包定時傳輸。

長連線的話沒必要自行實現,可以用tcp協議自身的心跳(keep-alive)。

長連線為什麼還需要心跳?連線可能因為以下情形被斷開:關閉連線,關閉程式(友好的和異常的),關閉計算機(友好的和異常的),網路硬體故障(拔網線)。

其中拔網線和停電關機,是沒有機會斷開連線的,這時候就要靠心跳了。

4樓:鄧沐陽

在如下情況下,即:

1,伺服器不主動給客戶端發包。

2,客戶端非正常關閉連線(比如宕機,斷網)。

情況下,伺服器端將一直維護tcp連線的狀態,而與之相關的系統資源(tcp埠,記憶體)將一直被占用。

所以需要伺服器每隔一段時間主動給客戶端發個包看看對方是否還在~另外,tcp的keepalive的最小檢測時長是2小時,對於很多應用而言太長了~再加上心跳又很容易實現,所以一般也就順手做了。

5樓:yuejunwei

一句話給你講明白:正如TCP層需要自己的心跳一樣,應用層也需要自己的心跳,心跳的本質不是探測下層服務是否存活,而是探測對端同層服務是否存活。

我再講一遍:應用層心跳是為了檢測對端應用層是否存活(當然也順便檢測了所有下層的存活)

6樓:楊冠群

你一定沒有遇到過乙個連線還在,但是收發訊息包都失效的情況吧,當你的伺服器上被這些連線所佔據,就知道乙個邏輯層的心跳是多麼的必要了。

網路的情況,簡直就是神鬼莫測……

7樓:

tcp 協議的連線狀態其實可以看成乙個狀態機,當客戶端和服務端建立連線後,客戶端和服務端的狀態就變成established,僅此而已。不去主動改變狀態,則這個以established 狀態是保持著的。這意味即使服務端突然消失了,客戶端的狀態依然是established。

而通過定時心跳,客戶端可以知道服務端不見了,從而嘗試重連或者釋放資源。

8樓:auxten

理想網路環境下TCP本身的心跳就夠了,但由於LVS、運營商HTTP劫持等現實中各種HTTP、TCP劫持的存在,TCP層面的心跳不能保證是真正的伺服器傳送的,所以要在應用層增加「心跳」

9樓:

題主需要依次理解以下異常情況對正在相互進行TCP通訊的兩個應用程式的影響,就明白為什麼在應用層依然需要維持定時心跳協議。

1 對端程式close socket

2 本機程式close socket

3 對端主機正常關機

4 對端程序被系統kill

5 對端主機意外崩潰關機,比如電源停電

6 對端主機重啟

7 本機與對端網線突然被拔掉

8 本機與對端中間路由器崩潰

9 對端程序陷入死鎖/阻塞等故障或者bug10 對端主機負載過高 cpu使用率100%如果開啟KEEPALIVE,以上這些可能又會怎麼樣?

10樓:dabbler0606

應用層的心跳和tcp自帶的心跳不是一回事

tcp自帶的引數keepalive是檢測死連線的具體:設定keepalive後

tcp會在空閒時給對方傳送資料

如果對方回覆ack,證明連線正常

如果對方回覆rst,說明連線退出

如果對方回覆fin,說明連線崩潰

如果對方未回應,繼續傳送直到超時。

應用層心跳keepalive是自己設定的,比如http是短連線,維持連線就定時傳送心跳包

11樓:小天

tcp是長連線?好像沒有這說法吧。如果不用tcp的keepalive也不在應用層實現心跳,在沒有資料交換的情況下,即使中間網路斷了或一端崩潰了,另一端也無從得知,還是一直維護著tcp的狀態。

ESXI平台在伺服器中處於什麼位置?

姜大鵬 回答這個問題要從幾個方面考慮 從作業系統看的話,它和Windows Linux等系統並無區別。只是在其上執行的資料比較特殊 軟體是自帶的,資料是虛擬化系統 呃可以這麼理解吧 從功能上講,它是宿主機,虛擬機器在它上面執行。從解決方案上看,最基本的非實驗虛擬化環境中要有多台提供虛擬化服務的esx...

如何實現單伺服器300萬個長連線的?

弱網環境要注意半連線佇列的問題,需要查 算清楚系統的半連線佇列最大是多少。一旦半連線佇列滿了,根據系統配置就會拒絕連線或者使用syn cookies了。 wingshu 理論上是可以的,這與伺服器cpu記憶體頻寬有關,但應用程式離不開業務邏輯處理,一旦複雜就難以處理幾百萬的量了。本人從事物聯網應用開...

如何看待CSGO中的 hvh伺服器?

Scream 正如HVH誕生的意義一樣,它唯一的正面作用便是牽制住了大部分的外掛程式玩家,要麼它從來就不出現如果出現了,也沒有必要勒令它消失. 趙xc 各路外掛程式測試,比參的地方,參便宜就要挨打的地方 個人很反感這類伺服器,遊戲本來就不能開掛,那麼你可能會問,這不是hvh嗎,開掛怎麼了?你以為人家...