我有一个简单的客户端脚本,如下所示:
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
,但不起作用。
1条答案
按热度按时间gopyfrb31#
答案其实很简单。出于某种原因,当我把
ws
变量放在connect()
函数之外,并在函数中修改它时,它就起作用了。我猜它会重新声明/重新创建ws
变量。它看起来像这样:重新启动服务器并重新连接后:
我觉得我应该知道这是怎么回事...