之前的測試都是,手動強制關閉客戶端程序,然後檢視伺服器的情況,結果往往是,伺服器收到了客戶端關閉的事件。其實,我一直忽略了乙個問題,我沒有拔掉網線來測試!
上面的手動關閉客戶端程序,事實上並不能測試出想要的結果,因為程序是在應用層的,所以,這種測試方法不能保證網路驅動層也不傳送資料報文給伺服器。經過測試發現,當應用層強制結束程序時,對於tcp連線,驅動層會傳送reset資料報!而伺服器收到這個資料報就可以正常關閉了!
那麼,如果拔掉網線呢,伺服器收不到這個資料報,就會導致死連線存在!
所以,心跳包是必要的,或者使用tcp協議本身的keep-alive來設定。
之所以產生前面的誤解,也是由於以前看書的時候,憑空想象,以為tcp連線如同一條繩子,一方斷開了,另外一方必然會知道的。殊不知,tcp連線,這個「面向連線」的連線並不存在,它只是抽象出來的概念,對於物理層,對於網線、光纖而言,不存在連線不連線的概念,因為,對它們而言,無非就是一些電流脈衝而已。tcp的連線,不過是通過ack、seq這些機制來模擬實現的。
遊戲伺服器心跳包的作用
遊戲伺服器心跳包的作用 服務端為什麼需要心跳 保活 機制 tcp keepalive howto 閒說heartbeat心跳包和tcp協議的keepalive機制 socket心跳包機制 乙個tcp鏈結很長時間沒有資料傳送,路由器已經釋放tcp鏈結,客戶端那邊close了,但伺服器那邊也不會有反應 ...
心跳檢測伺服器是否正常的開源專案
是否只有伺服器宕機了,別人打 通知你,你才發現伺服器出問題了呢?對於那些不能時刻24小時有人值班的伺服器來說.如果你是開發人員或運維人員,但又想時刻知道伺服器當前是否正常工作 主要指連線正常 若不正常時會通知自己,恢復正常時候也通知自己.如果你有類似以上這樣的需求的話.給推薦乙個開源的專案 因為也是...
中興伺服器取消trap心跳
前陣子給幾台中興伺服器配置了snmptrap到zabbix伺服器上,今天早上一看,zabbix上最新資料不是今天的了。檢查了zabbix伺服器的效能,結果發現是磁碟空間佔滿了,資料庫有做過優化,不會佔滿磁碟,最近做過的操作就只有配置snmptrap了。接下來ll h了下 tmp目錄下的zabbix ...