Java Socket 網絡編程心跳設計概念


Java Socket 網絡編程心跳設計概念

 

1、一般是用來判斷對方(設備,進程或其它網元)是否正常動行,一 般采用定時發送簡單的通訊包,如果在指定時間段內未收到對方響應,則判斷對方已經當掉。用於檢測TCP的異常斷開。一般是用來判斷對方(設備,進程或其它 網元)是否正常動行,一般采用定時發送簡單的通訊包,如果在指定時間段內未收到對方響應,則判斷對方已經當掉。用於檢測TCP的異常斷開。基本原因是服務 器端不能有效的判斷客戶端是否在線也就是說,服務器無法區分客戶端是長時間在空閑,還是已經掉線的情況.所謂的心跳包就是客戶端定時發送簡單的信息給服務 器端告訴它我還在而已。代碼就是每隔幾分鍾發送一個固定信息給服務端,服務端收到后回復一個固定信息如果服務端幾分鍾內沒有收到客戶端信息則視客戶端斷 開。比如有些通信軟件長時間不使用,要想知道它的狀態是在線還是離線就需要心跳包,定時發包收包。發包方:可以是客戶也可以是服務端,看哪邊實現方便合 理。一般是客戶端。服務器也可以定時輪詢發心跳下去。一般來說,出於效率的考慮,是由客戶端主動向服務器端發包。

 

2、就是在客戶端和服務器間定時通知對方自己狀態的一個自己定義的命令字,按照一定的時間間隔發送,類似於心跳,所以叫做心跳包。

 

3、就是定時發送給對方一個數據包,告訴對方自己還在維護對話,同時獲得返回的數據,判斷對方是否在會話中。

 

4、客戶端每隔一段時間發一個包,使用TCP的,用send發,使用UDP的,用sendto發,服務器收到后,就知道當前客戶端還處於“活着”的狀態,否則,如果隔一定時間未收到這樣的包,則服務器認為客戶端已經斷開,進行相應的客戶端斷開邏輯處理。

 


一、什么是心跳檢測

判斷對方(設備,進程或其它網元)是否正常動行,一般采用定時發送簡單的通訊包,如果在指定時間段內未收到對方響應,則判斷對方已經當掉。用於檢測TCP的異常斷開。

基本原因是服務器端不能有效的判斷客戶端是否在線也就是說,服務器無法區分客戶端是長時間在空閑,還是已經掉線的情況。所謂的心跳包就是客戶端定時發送簡單的信息給服務器端告訴它我還在而已。

代碼就是每隔幾分鍾發送一個固定信息給服務端,服務端收到后回復一個固定信息。如果服務端幾分鍾內沒有收到客戶端信息則視客戶端斷開。比如有些通信軟件長時間不使用,要想知道它的狀態是在線還是離線就需要心跳包,定時發包收包。

發包方可以是客戶也可以是服務端,看哪邊實現方便合理。一般是客戶端。服務器也可以定時輪詢發心跳下去。

一般來說,出於效率的考慮,是由客戶端主動向服務器端發包,而不是相反。

二、關於Send函數的返回值

我 們知道當客戶端以優雅的方式斷開TCP連接后,服務器使用Send函數發包,得到的返回值為0(說明TCP連接已斷開)。然而,SEND函數的成功返回只 能表示發送數據已經進入了SOCKET內核的發送隊列,不一定就已經在線上或者已經被成功接收了。這可能是因為send只是往發送緩沖區拷貝數據, 剛開始緩沖區還未滿,所以不會有錯誤發生, 只有等到相當一段長的時間后, send的返回值才會為-1。

三、定時Ping

如 果服務器不能進行心跳檢測的應答。可以采用定時Ping某服務器來檢測TCP連接是否斷開,如新浪(必須允許Ping的服務器)。PING是向遠程主機發 送一個ICMP包,如果給定時間內沒有接收到回應就認為是超時,如果收到回應則分析接收到的ICMP包,得到TTL、類型以及用時。

不過Ping包有32字節,如果是無線連接,有時需要考慮流量問題。

四、使用TCP存活定時器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM