1. java 如何實現長連接心跳檢測機制
發心跳包。每隔幾秒就發一個數據包過去,這是通訊常見問題。
可以使用的是pushlet來實現;
普通列表由瀏覽器維護一個長連接,發送請求後,伺服器不以http response的方式返回,而是建立類似管道的途徑,當有更新時,伺服器通過這個管道發送消息,直到頁面關閉後斷開這個鏈接。
另外,如果使用這些框架,那麼在前端(頁面)和後端(服務)都要進行改變,需要視自己的實際情況使用。
2. java中Socket的心跳包設置問題
使用一個線程進行監控,如果空閑一定時間就發送一個心跳包。對於非同步Socket可以一個線程監控多個連接。
3. java的自動發送心跳包究竟是該寫在伺服器還是客戶端
socket.setKeepAlive()應該寫在客戶端,server.accept()是伺服器端的。
心跳的也有現成的,不過依賴別的類。大概貼一下,就是這么個意思。
{
privateCommandDealcommand;
/**
*@returnthecommand
*/
publicCommandDealgetCommand(){
returncommand;
}
/**
*@paramcommand
*thecommandtoset
*/
publicvoidsetCommand(CommandDealcommand){
this.command=command;
}
publicvoidrun(){
longmaxWait=SendConfig.hbhb_wait;
if(maxWait<1000){
maxWait=1000;
}
DatelastTime;
longtimeDiv=0;
while(1==1){
lastTime=SocketQueueObject.getLastContactTime();
if(lastTime!=null){
timeDiv=(newDate()).getTime()-SocketQueueObject.getLastContactTime().getTime();
System.out.println("TimeDiv:"+timeDiv);
}
//上次聯系的時間超過最大等待,或者還沒聯系過
if(lastTime==null||timeDiv>=maxWait){
System.out.println("HBHB");
command.sendHbhbCommand();
}elseif(maxWait>timeDiv){
maxWait=maxWait-timeDiv;
}
try{
this.sleep(maxWait);
}catch(Exceptione){
e.printStackTrace();
}
}
}
{
privatestaticLoggermsg_logger=Logger.getLogger("socketMsg");
@SuppressWarnings("unchecked")
publicListdoCommand(,Mapcommand)throwsException{
List<String>commandList=(List)command.get(Constants.SMSCOMMAND);
byte[]hbhbMsg=TL1Tool.createCommand(commandList.get(0));
msg_logger.info("sendmessagetosmspacked:"+newString(hbhbMsg,"ISO-8859-1"));
TL1RetrunMessageretMsg=socketQueueObject.commNGNServer(hbhbMsg);
retMsg.resolve();
msg_logger.info("recevicemessagefromsms:"+retMsg.getMessage());
ListreturnList=newArrayList();
returnList.add(retMsg);
returnreturnList;
}
}
你可以自己找找看啊。
4. java socket 長連接發送心跳包
你這個問題很先進!現在有一個剛出來的框架可以完全實現你這個需求,叫做Pushlet。
你可以上網查查。
5. java心跳監測
你網路搜索一下,socket心跳檢測,很多封裝好的方法,而且代碼量不大。可以看懂的
6. javaweb中怎樣在後台實現實時捕捉心跳包
隨項目啟動一個servlet,創建定時器,定時請求獲取心跳
7. 有誰做過路由器心跳包么,後台代碼java怎麼實現
專門使用一個線程進行監控, 如果空閑一定時間就發送一個心跳包。 對於非同步Socket 可以一個線程監控多個 連接。
8. java心跳是怎麼回事兒
1.什麼是心跳包?
心跳包就是在客戶端和伺服器間定時通知對方自己狀態的一個自己定義的命令字,按照一定的時間間隔發送,類似於心跳,所以叫做心跳包。
用來判斷對方(設備,進程或其它網元)是否正常運行,採用定時發送簡單的通訊包,如果在指定時間段內未收到對方響應,則判斷對方已經離線。用於檢測TCP的異常斷開。基本原因是伺服器端不能有效的判斷客戶端是否在線,也就是說,伺服器無法區分客戶端是長時間在空閑,還是已經掉線的情況。所謂的心跳包就是客戶端定時發送簡單的信息給伺服器端告訴它我還在而已。代碼就是每隔幾分鍾發送一個固定信息給服務端,服務端收到後回復一個固定信息如果服務端幾分鍾內沒有收到客戶端信息則視客戶端斷開。
比如有些通信軟體長時間不使用,要想知道它的狀態是在線還是離線就需要心跳包,定時發包收包。發包方:可以是客戶也可以是服務端,看哪邊實現方便合理,一般是客戶端。伺服器也可以定時發心跳下去。一般來說,出於效率的考慮,是由客戶端主動向伺服器端發包,而不是伺服器向客戶端發。客戶端每隔一段時間發一個包,使用TCP的,用send發,使用UDP的,用sendto發,伺服器收到後,就知道當前客戶端還處於「活著」的狀態,否則,如果隔一定時間未收到這樣的包,則伺服器認為客戶端已經斷開,進行相應的客戶端斷開邏輯處理。
9. java如何實現客戶端與服務端的心跳機制
socket.sendUrgentData(0xFF)主要是這個
socket是這樣發送心跳的,參考一下,這是我寫過的部分代碼,專門開一個線程發送心跳
new Thread(new Runnable() {
@Override
public void run() {
while(socket!=null && !socket.isClosed()){
try {
socket.sendUrgentData(0xFF);
} catch (IOException e) {
e.printStackTrace();
reconnect();
}
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
log.info("connection is missing!"+Calendar.getInstance().getTime().getTime());
}
}).start();