簡體   English   中英

Websocket 不會重新連接,除非我關閉瀏覽器選項卡並重新啟動它

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM