[英]Websocket is unable to reconnect after restarting the server in Javascript
我有一個像這樣的簡單客戶端腳本:
function connect() {
const { contextBridge } = require('electron');
var ws = new WebSocket('ws://localhost:3000');
ws.onerror = (error) => {
console.error(`Lost connection to server. Reason: ${error.message}`);
console.error('Attempting to reconnect...');
ws.close();
}
ws.onclose = (e) => {
setTimeout({
connect();
}, 500);
}
ws.addEventListener('open', () => {
console.log('Connected to server!');
});
// Some other stuff to call functions via the browser console
const API = {
ws_isOpen: () => { return ws.readyState === ws.OPEN }
}
contextBridge.exposeInMainWorld('api', API);
function send_msg(msg) {
// Process some data...
ws.send(msg);
}
}
connect();
當服務器正在運行並嘗試連接時,它可以正常工作,或者當服務器重新啟動並且第一次嘗試連接時,但在連接時不能正常工作。 我的意思是,如果我在客戶端連接到服務器時突然關閉服務器,它會嘗試像往常一樣嘗試重新連接,並且會彈出成功消息。 但是,如果我在瀏覽器控制台中輸入window.api.ws_isOpen()
,它會返回false
。 當我嘗試發送消息時,會彈出一條錯誤消息,提示Websocket is already in CLOSING or CLOSED stage
類的內容。 我嘗試將ws
變量類型更改為let
和const
但它不起作用。
原來答案很簡單。 出於某種原因,當我將ws
變量放在connect()
function 之外並在 function 中對其進行修改時,它可以工作。 我猜它有點重新聲明/重新更新ws
變量。 它看起來像這樣:
var ws = null;
function connect() {
ws = new WebSocket('ws://localhost:3000');
// the exact same as above here....
}
connect();
重新啟動服務器並讓它重新連接后:
>> window.api.ws_isOpen()
true
我覺得我應該知道這是怎么回事...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.