給websocket加入心跳包防止自動斷開連線

2021-09-02 05:08:45 字數 1227 閱讀 3803

原文:

var userid=$("#userid").val();

var lockreconnect = false; //避免ws重複連線

var ws = null; // 判斷當前瀏覽器是否支援websocket

var wsurl = serverconfig.cyberhouse_ws+userid;

createwebsocket(wsurl); //連線ws

function createwebsocket(url) else if('mozwebsocket' in window)else);

}initeventhandle();

}catch(e)

}function initeventhandle() ;

ws.onerror = function () ;

ws.onopen = function () ;

ws.onmessage = function (event) else if(obj.type=="friend" || obj.type=="group")

};}// 監聽視窗關閉事件,當視窗關閉時,主動去關閉websocket連線,防止連線還沒斷開就關閉視窗,server端會拋異常。

window.onbeforeunload = function()

function reconnect(url) , 2000);

}//心跳檢測

var heartcheck = ,

start: function(), self.timeout)

}, this.timeout)

}}

// 收到客戶端訊息後呼叫的方法 

@onmessage

public void onmessage(string message, session session) else

}

系統發現websocket每隔10分鐘自動斷開連線,搜了很多部落格都說設定一下nginx的 

keepalive_timeout 

proxy_connect_timeout 

proxy_send_timeout 

proxy_read_timeout 

這四個欄位的時長即可,然而好像並不奏效。遂採取心跳包的方式每隔9分鐘客戶端自動傳送ping訊息給服務端,服務端不需要返回。即可解決問題。

給websocket加入心跳包防止自動斷開連線

var userid userid val var lockreconnect false 避免ws重複連線 var ws null 判斷當前瀏覽器是否支援websocket var wsurl serverconfig.cyberhouse ws userid createwebsocket ws...

WebSocket加入心跳包防止自動斷開連線

近日,在公司中開發乙個使用websocket為前端推送訊息的功能時,發現乙個問題 就是每隔一段時間如果不傳送資料的話,與前段的連線就會自動斷開 剛開始以為是session的原因,因為web session 的預設時間是30分鐘 但是通過日誌發現斷開時間間隔時間遠遠不到30分鐘 認真分析發現不操作間隔...

WebSocket加入心跳包防止自動斷開連線

近日,在公司中開發乙個使用websocket為前端推送訊息的功能時,發現乙個問題 就是每隔一段時間如果不傳送資料的話,與前段的連線就會自動斷開 剛開始以為是session的原因,因為web session 的預設時間是30分鐘 但是通過日誌發現斷開時間間隔時間遠遠不到30分鐘 認真分析發現不操作間隔...