<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/開源資料

    主站蜘蛛池模板: 白白色免费在线视频| 亚洲精品天堂在线观看| 一个人看的www视频免费在线观看 一个人看的免费观看日本视频www | a级在线观看免费| 亚洲中文字幕视频国产| 九九九精品视频免费| 亚洲中文字幕无码专区| 黄视频在线观看免费| 中文字幕精品亚洲无线码二区| 一级中文字幕乱码免费| 亚洲熟女少妇一区二区| 污视频在线观看免费| 亚洲成a人片在线观看播放| 在线观看视频免费完整版| 亚洲国产欧美国产综合一区 | 亚洲精品中文字幕麻豆| 免费做爰猛烈吃奶摸视频在线观看 | 日产亚洲一区二区三区| 在免费jizzjizz在线播| 亚洲中文字幕久久精品蜜桃| 国产成人综合久久精品免费| 一区二区三区免费看| 亚洲欧洲日韩国产综合在线二区| 4399影视免费观看高清直播| 亚洲欧洲日韩极速播放| 国产三级免费观看| 国产偷伦视频免费观看| 亚洲人成高清在线播放| 国产中文字幕免费观看| 日本在线免费观看| 亚洲午夜精品一区二区麻豆| 亚洲国产成人久久精品99| 国产精品视频白浆免费视频| 亚洲综合无码无在线观看| 亚洲高清国产拍精品青青草原| 最近中文字幕大全免费版在线| 亚洲一级毛片免观看| 亚洲国产成人久久综合野外| 91av视频免费在线观看| 国产亚洲精品精品精品| 亚洲最大的成网4438|