【问题标题】:Websocket is unable to reconnect after restarting the server in Javascript用Javascript重新启动服务器后Websocket无法重新连接
【发布时间】:2022-08-24 12:43:48
【问题描述】:

我有一个简单的客户端脚本,如下所示:

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();

当服务器在连接时正在运行时,它在第一次连接时服务器正在重新启动时正常工作,但在它\'s连接的.我的意思是,如果我在客户端连接到服务器时突然关闭服务器,它会尝试像往常一样尝试重新连接,并且会弹出成功消息。但是,如果我在浏览器控制台中输入window.api.ws_isOpen(),它会返回false。当我尝试发送消息时,会弹出一条错误消息,如Websocket is already in CLOSING or CLOSED stage。我尝试将ws 变量类型更改为letconst,但它不起作用。

    标签: javascript html sockets websocket electron


    【解决方案1】:

    原来答案很简单。出于某种原因,当我将ws 变量放在connect() 函数之外并在函数中对其进行修改时,它起作用了,它有点重新声明/重新新建ws 变量。它看起来像这样:

    var ws = null;
    
    function connect() {
        ws = new WebSocket('ws://localhost:3000');
    
        // the exact same as above here....
    }
    
    connect();
    

    我觉得我应该知道这是怎么回事...

    【讨论】:

      猜你喜欢
      • 2016-08-16
      • 2013-11-10
      • 2011-04-16
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 2022-11-10
      相关资源
      最近更新 更多