有時候我們的程式要求socket一直保持連線,並且希望在socket斷開以後能夠重新連線,這個時候就需要用到心跳機制,所謂心跳機制,最簡單的做法就是客戶端每隔一段時間向服務端傳送資料報,為了節約資源我們很多時候傳送空資料就好,如果資料不能傳送成功說明socket已經斷開,這個時候就需要根據具體需求釋放資源和重新連線了。
下面給出乙個簡單的小demo
/**
* 連線服務端
*/private void connecttoserver() catch (unknownhostexception e) catch (ioexception e)
}});
connectthread.start();
}
上述方法負責建立新的socket例項和開啟心跳檢測,其中比較重要的**是
mhandler.postdelayed(mheartbeatrunnable, heart_beat_rate);
這裡的heart_beat_rate是乙個int常量,表示心跳間隔,mheartbeatrunnableze則負責心跳檢測
// 心跳機制
private socketreadthread mreadthread;
private static final long heart_beat_rate = 4 * 1000;
private long sendtime = 0l;
private runnable mheartbeatrunnable = new runnable()
}mhandler.postdelayed(this, heart_beat_rate);}};
/*** 傳送心跳包
* * @param msg
* @return
*/public boolean sendheartbeatmsg(string msg)
try else
} catch (ioexception e)
return true;
}
上述方法是心跳檢測的主要方法,呼叫sendheartbeatmsg()傳送資料到服務端,該方法稍後給出。如果檢測到連線斷開,則釋放各種資源,重新連線。如果連線沒有斷開則繼續檢測,非常簡單的邏輯
/**
* 斷開連線
* */
private void releaselastsocket()
}msocket = null;
} catch (ioexception e)
}
最後給出socketreadthread執行緒,這個執行緒負責讀取服務端傳送過來的資料,和心跳機制無關,但在心跳機制中重連處理時,一定要釋放它的資源。
public class socketreadthread extends thread
@override
public void run()
} catch (unknownhostexception e) catch (ioexception e) finally catch (ioexception e)
if (minputstream != null) catch (ioexception e) }}
}
Websocket心跳重連
websocket心跳重連 最近的工作業務上有用到關於websocket的相關知識,本來打算用socket.io去完成,但是最後還是採用了自帶的websocket的方式完成需求 this.websocket.binarytype arraybuffer 現在想象一下有這麼乙個場景,如果網路狀態不佳,...
websocket 心跳重連
websocket是什麼 websocket作用是來做訊息的實時推送 websocket的基本事件有onopen onmessage onerror onclose這四個事件,onopen是連線已開啟,且可以通訊,onmessage是收到訊息,onerror是websocket發生錯誤,onclos...
websocket心跳重連機制
1 心跳重連的原因 心跳和重連的目的用一句話概括就是客戶端和服務端保證彼此還活著,避免丟包發生。websocket斷開有兩種情況 前端斷開 在使用websocket過程中,可能會出現網路斷開的情況,比如訊號不好,或者網路臨時關閉,這時候websocket的連線已經斷開,而不同瀏覽器有不同的機制,觸發...