[英]Websocket won't reconnect unless I close the browser tab and restart it
我有一個在 ESP8266 上設置了 websockets 的網絡服務器。 該應用程序在客戶端和服務器端都運行良好,可以發送和接收數據。 但是,如果服務器端斷開連接(電源循環或上傳新代碼),客戶端(Chrome)將不會重新連接到 websocket。我可以重新加載/刷新 web 頁面,它聲稱(根據控制台日志)是連接到 websocket,但它沒有。 我發現唯一可行的解決方案是關閉選項卡,然后重新啟動一個新的 session。
我的代碼很大程度上基於Random Nerd Tutorials中的本教程
var gateway = `ws://${window.location.hostname}/ws`;
var websocket;
function initWebSocket() {
console.log('Trying to open a WebSocket connection...');
websocket = new WebSocket(gateway);
websocket.onopen = onOpen;
websocket.onclose = onClose;
websocket.onmessage = onMessage; // <-- add this line
}
function onOpen(event) {
console.log('Connection opened');
}
function onClose(event) {
console.log('Connection closed');
setTimeout(initWebSocket, 2000);
}
上面的代碼中是否缺少某些使其更可靠的東西?
您可能需要使用setInterval 。 試試這個,你可能需要稍微調整一下。
var gateway = `ws://${window.location.hostname}/ws`;
var websocket, sockTimer=null;
function initWebSocket() {
console.log('Trying to open a WebSocket connection...');
websocket = new WebSocket(gateway);
websocket.onopen = onOpen;
websocket.onerror = onError; // new
websocket.onclose = onClose;
websocket.onmessage = onMessage; // <-- add this line
}
function onOpen(event) {
clearInterval(sockTimer) // <= better
console.log('Connection opened');
}
function onError() { // <= New
sockTimer = setInterval(init, 1000 * 60);
};
function onClose(event) {
console.log('Connection closed');
//setTimeout(initWebSocket, 2000);
sockTimer = setInterval(initWebSocket, 1000 * 60); // <=new
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.