服務(wù)器實現(xiàn)心跳機制的兩種策略(2011-02-18 17:08)
大部分CS的應(yīng)用需要心跳機制。心跳機制一般在Server和Client都要實現(xiàn),兩者實現(xiàn)原理基本一樣。Client不關(guān)心性能,怎么做都行。 如果應(yīng)用是基于TCP的,可以簡單地通過SO_KEEPALIVE實現(xiàn)心跳。TCP在設(shè)置的KeepAlive定時器到達時向?qū)Χ税l(fā)一個檢測TCP segment,如果沒收到ACK或RST,嘗試幾次后,就認為對端已經(jīng)不存在,最后通知應(yīng)用程序。這里有個缺點是,Server主動發(fā)出檢測包,對性能有點影響。 應(yīng)用自己實現(xiàn) Client啟動一個定時器,不斷發(fā)心跳; Server收到心跳后,給個回應(yīng); Server啟動一個定時器,判斷Client是否存在,判斷方法這里列兩種:時間差和簡單標志。 1. 時間差策略 收到一個心跳后,記錄當前時間(記為recvedTime)。 判斷定時器時間到達,計算多久沒收到心跳的時間(T)=當前時間 - recvedTime(上面記錄的時間)。如果T大于某個設(shè)定值,就可以認為Client超時了。 2. 簡單標志 收到一個心跳后,設(shè)置連接標志為true; 判斷定時器時間到達,查看所有的標志,false的,認為對端超時了;true的將其設(shè)成false。 上面這種方法比上面簡單一些,但檢測某個Client是否離線的誤差有點大。
本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/herm_lib/archive/2010/12/04/6054443.aspx |
|
來自: CevenCheng > 《JavaWeb》