我正在編寫一段JavaScript代碼來與自定義的C#web套接字服務器進行通信,並按照我的建議練習重試連接。WebSocket查詢有沒有限制?
當JS準備就緒時,服務器可能沒有準備好,所以我需要做的是繼續嘗試連接到websocket,直到最終成功。
建議的做法告訴我,我需要捕獲onclose事件或onerror事件,並且其中任何一個嘗試重新連接,最好採用某種退避策略。
根據此建議,我想出了下面的代碼:
<html>
<head>
<title>WS</title>
</head>
<body>
<h1>WS</h1>
<button onclick="init()">Connect</button>
<button onclick="deInit()">Disconnect</button>
<button onclick="send()">Message</button>
<script>
var mySocket;
function init(){
mySocket = new WebSocket("ws://localhost:9000/foolish");
mySocket.onopen = function(){
console.log("OPEN");
};
mySocket.onclose = function(status){
console.log("CLOSE");
console.log(status);
if(status.code === 1006){
mySocket = new WebSocket("ws://localhost:9000/foolish");
}
};
mySocket.onerror = function(err){
console.log("ERROR");
console.log(err);
};
mySocket.onmessage = function(msg){
console.log("MESSAGE");
console.log(msg);
};
}
function deInit(){
mySocket.close();
}
function send(){
mySocket.Send("foo");
}
</script>
</body>
</html>
Iv'e試圖進行錯誤處理程序重新連接,並連接到一個「的setTimeout」號召,太並且輸出總是相同的。
我的事件處理程序觸發一次,重新嘗試連接,但第二次失敗時,沒有任何事件處理程序被觸發,而我只留下一個失敗的嘗試,如下圖所示:
一切我讀過告訴我,每次我重試,屢時間去連接,我的錯誤處理程序和/或關閉處理程序應繼續開火讓我選擇來處理錯誤,但它它不會嘗試兩次並放棄。
這發生在IE11,IE10,Chrome 50+和FireFox最新版本。
鑑於它在瀏覽器中的一致性,那麼我只是猜測它是通過設計還是我做錯了什麼,但是我真的沒有看到問題是什麼。
如果任何人有任何想法,我會非常感激,如果你能指出我在正確的方向。
當然。我怎麼會錯過那個:-)。總是有些簡單不是它。 – shawty