socket心跳检测
生活随笔
收集整理的這篇文章主要介紹了
socket心跳检测
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、什么是心跳檢測
判斷對方(設(shè)備,進程或其它網(wǎng)元)是否正常動行,一般采用定時發(fā)送簡單的通訊包,如果在指定時間段內(nèi)未收到對方響應(yīng),則判斷對方已經(jīng)當?shù)?。用于檢測TCP的異常斷開。
基本原因是服務(wù)器端不能有效的判斷客戶端是否在線也就是說,服務(wù)器無法區(qū)分客戶端是長時間在空閑,還是已經(jīng)掉線的情況。所謂的心跳包就是客戶端定時發(fā)送簡單的信息給服務(wù)器端告訴它我還在而已。
代碼就是每隔幾分鐘發(fā)送一個固定信息給服務(wù)端,服務(wù)端收到后回復(fù)一個固定信息。如果服務(wù)端幾分鐘內(nèi)沒有收到客戶端信息則視客戶端斷開。比如有些通信軟件長時間不使用,要想知道它的狀態(tài)是在線還是離線就需要心跳包,定時發(fā)包收包。
發(fā)包方可以是客戶也可以是服務(wù)端,看哪邊實現(xiàn)方便合理。一般是客戶端。服務(wù)器也可以定時輪詢發(fā)心跳下去。
一般來說,出于效率的考慮,是由客戶端主動向服務(wù)器端發(fā)包,而不是相反。
二、關(guān)于Send函數(shù)的返回值
我們知道當客戶端以優(yōu)雅的方式斷開TCP連接后,服務(wù)器使用Send函數(shù)發(fā)包,得到的返回值為0(說明TCP連接已斷開)。然而,SEND函數(shù)的成功返回只能表示發(fā)送數(shù)據(jù)已經(jīng)進入了SOCKET內(nèi)核的發(fā)送隊列,不一定就已經(jīng)在線上或者已經(jīng)被成功接收了。這可能是因為send只是往發(fā)送緩沖區(qū)拷貝數(shù)據(jù), 剛開始緩沖區(qū)還未滿,所以不會有錯誤發(fā)生, 只有等到相當一段長的時間后, send的返回值才會為-1。
三、定時Ping
如果服務(wù)器不能進行心跳檢測的應(yīng)答??梢圆捎枚〞rPing某服務(wù)器來檢測TCP連接是否斷開,如新浪(必須允許Ping的服務(wù)器)。PING是向遠程主機發(fā)送一個ICMP包,如果給定時間內(nèi)沒有接收到回應(yīng)就認為是超時,如果收到回應(yīng)則分析接收到的ICMP包,得到TTL、類型以及用時。
不過Ping包有32字節(jié),如果是無線連接,有時需要考慮流量問題。
四、使用TCP存活定時器
判斷對方(設(shè)備,進程或其它網(wǎng)元)是否正常動行,一般采用定時發(fā)送簡單的通訊包,如果在指定時間段內(nèi)未收到對方響應(yīng),則判斷對方已經(jīng)當?shù)?。用于檢測TCP的異常斷開。
基本原因是服務(wù)器端不能有效的判斷客戶端是否在線也就是說,服務(wù)器無法區(qū)分客戶端是長時間在空閑,還是已經(jīng)掉線的情況。所謂的心跳包就是客戶端定時發(fā)送簡單的信息給服務(wù)器端告訴它我還在而已。
代碼就是每隔幾分鐘發(fā)送一個固定信息給服務(wù)端,服務(wù)端收到后回復(fù)一個固定信息。如果服務(wù)端幾分鐘內(nèi)沒有收到客戶端信息則視客戶端斷開。比如有些通信軟件長時間不使用,要想知道它的狀態(tài)是在線還是離線就需要心跳包,定時發(fā)包收包。
發(fā)包方可以是客戶也可以是服務(wù)端,看哪邊實現(xiàn)方便合理。一般是客戶端。服務(wù)器也可以定時輪詢發(fā)心跳下去。
一般來說,出于效率的考慮,是由客戶端主動向服務(wù)器端發(fā)包,而不是相反。
二、關(guān)于Send函數(shù)的返回值
我們知道當客戶端以優(yōu)雅的方式斷開TCP連接后,服務(wù)器使用Send函數(shù)發(fā)包,得到的返回值為0(說明TCP連接已斷開)。然而,SEND函數(shù)的成功返回只能表示發(fā)送數(shù)據(jù)已經(jīng)進入了SOCKET內(nèi)核的發(fā)送隊列,不一定就已經(jīng)在線上或者已經(jīng)被成功接收了。這可能是因為send只是往發(fā)送緩沖區(qū)拷貝數(shù)據(jù), 剛開始緩沖區(qū)還未滿,所以不會有錯誤發(fā)生, 只有等到相當一段長的時間后, send的返回值才會為-1。
三、定時Ping
如果服務(wù)器不能進行心跳檢測的應(yīng)答??梢圆捎枚〞rPing某服務(wù)器來檢測TCP連接是否斷開,如新浪(必須允許Ping的服務(wù)器)。PING是向遠程主機發(fā)送一個ICMP包,如果給定時間內(nèi)沒有接收到回應(yīng)就認為是超時,如果收到回應(yīng)則分析接收到的ICMP包,得到TTL、類型以及用時。
不過Ping包有32字節(jié),如果是無線連接,有時需要考慮流量問題。
四、使用TCP存活定時器
總結(jié)
以上是生活随笔為你收集整理的socket心跳检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CAN总线基础(三)
- 下一篇: Socket心跳包机制