<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統計

    留言簿(23)

    積分與排名

    優秀學習網站

    友情連接

    閱讀排行榜

    評論排行榜

    心跳包檢測不可檢測斷線 (轉)

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


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

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

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

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

    示例代碼:

    import org.apache.log4j.Logger;

    import com.example.HeartBeat;//是一個普通POJO

    public class HeartBeatRunnable implements Runnable {
        
    /**
         * Logger for this class
         
    */

        
    private static final Logger logger = Logger.getLogger(HeartBeatRunnable.class);
        
    private HeartBeatRunnable() {
        }


        
    private static HeartBeatRunnable instance = null;

        
    public static HeartBeatRunnable getInstance() {
            
    if (instance == null{
                instance 
    = new HeartBeatRunnable();
            }

            
    return instance;
        }

        
        
    private int interval = 10000;//心跳周期
        private boolean stoped = false;
        
        
    public HeartBeatRunnable(int interval) {
            
    this.interval = interval;
        }


        
    public void run() {
            HeartBeat bean 
    = new HeartBeat();
            
    while (!stoped) {
                
    try {
    //                logger.debug("heart beat");
                    HttpSender.sendToServer(bean);
                    
    synchronized (this{
                        
    this.wait(interval);
                    }

                }
     catch (Exception e) {
                    logger.debug(
    "", e);
                }

            }

        }


        
    public void destroy() {
            stoped 
    = true;        
            
    synchronized (this{
                
    this.notify();
            }

        }


        
    public int getInterval() {
            
    return interval;
        }


        
    public void setInterval(int interval) {
            
    this.interval = interval;
        }


    }

    HttpSender代碼:

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;

    import org.apache.log4j.Logger;

    import com.example.BaseBean;//是HeatBean的父類,這里就不提供了

    public class HttpSender {
        
        
    private static Logger log = Logger.getLogger(HttpSender.class);
        
        
    private static boolean connectURL(String dest_url, String commString)
        
    {
            log.debug(
    "POST TO: "+dest_url);
            URL url 
    = null;
            HttpURLConnection urlconn 
    = null;
            
    try
            
    {
                url 
    = new URL(dest_url);
                urlconn 
    = (HttpURLConnection) url.openConnection();
                urlconn.setRequestProperty(
    "content-type""text/plain");
                urlconn.setRequestMethod(
    "POST");
                urlconn.setDoInput(
    true);
                urlconn.setDoOutput(
    true);
                OutputStream out 
    = urlconn.getOutputStream();
                out.write(commString.getBytes(
    "UTF8"));
                out.flush();
                out.close();
                BufferedReader rd 
    = new BufferedReader(new InputStreamReader(
                        urlconn.getInputStream()));
                StringBuffer sb 
    = new StringBuffer();
                
    int ch;
                
    while ((ch = rd.read()) > -1{
                    sb.append((
    char) ch);
                }

                log.debug(
    "POST RESPONSE: " + sb.toString());
                rd.close();
                urlconn.disconnect();
            }

            
    catch (Throwable e)
            
    {
                log.error(e.getMessage(), e);
                
    return false;
            }


            
    return true;
        }

        
        
    /**
         * 向監控服務器發送包
         * 
    @param bean
         * 
    @return
         
    */

        
    public static boolean sendToServer(BaseBean bean) {
            
    return connectURL(System.getProperty("server_url"), bean.constructString());
        }


    }


    posted on 2007-12-07 17:43 都市淘沙者 閱讀(3178) 評論(0)  編輯  收藏 所屬分類: Java Basic/Lucene/開源資料

    主站蜘蛛池模板: 在线aⅴ亚洲中文字幕| 亚洲熟妇色自偷自拍另类| 国产精品亚洲一区二区无码| 成人无遮挡裸免费视频在线观看| 亚洲AV无码乱码国产麻豆穿越| 中文字幕在线视频免费| 亚洲一区二区女搞男| 国产一级a毛一级a看免费视频| 亚洲情XO亚洲色XO无码| 曰批全过程免费视频在线观看无码| 亚洲中文字幕在线乱码| 欧洲精品99毛片免费高清观看| 亚洲毛片在线观看| 免费A级毛片无码A∨免费| 精品亚洲AV无码一区二区三区 | 国产精品99久久免费| 久久WWW免费人成人片| 国产极品美女高潮抽搐免费网站| 18禁超污无遮挡无码免费网站 | 亚洲精品无码精品mV在线观看| 精品国产呦系列在线观看免费| 国产成人无码综合亚洲日韩| 99精品在线免费观看| 亚洲首页国产精品丝袜| 国产成人高清精品免费鸭子| 国产免费黄色无码视频 | 涩涩色中文综合亚洲| 午夜免费国产体验区免费的| 在线免费播放一级毛片| 特级毛片A级毛片免费播放| 美女羞羞喷液视频免费| 猫咪免费人成在线网站| 国产无遮挡又黄又爽免费网站| 国产性生大片免费观看性| 最好免费观看高清在线| 亚洲成人免费网址| 在线观看AV片永久免费| 亚洲日韩在线观看免费视频| 亚洲第一中文字幕| 免费激情网站国产高清第一页| 成人毛片免费播放|