捕获 WebSocket 异常:"WebSocket 握手期间出错:意外响应代码:503"



我正在尝试实现一个WebSocket连接,当我的网站关闭时,每隔X秒重新连接一次,直到它重新上线。到目前为止,我得到了这个:

var onCloseHandler = function() {
    reconnect();
}
function reconnect() {
    try {
        console.log('Connection lost, trying to reconnect...');
        socket = new WebSocket(myUrl);
        socket.onerror = onErrorHandler;
        socket.onmessage = onMessageHandler;
        socket.onopen = onOpenHandler;
        socket.onclose = onCloseHandler;
    } catch (err) {
        setTimeout(function() {
            reconnect();
        }, 1000);
    }
}

我的问题是,当onCloseHandler第一次被调用时(即当我的网站突然离线时),new WebSocket()调用抛出下一个异常:

WebSocket connection to '<here_goes_my_url>' failed: Error during WebSocket handshake: Unexpected response code: 503

并且没有办法捕获它(在X秒的时间内再次调用相同的函数)或使执行移动到下一行。它只是崩溃,通过浏览器的控制台显示异常,并停止执行。

是否有办法捕获这个异常?

提前感谢。

编辑:只是为了说清楚,onclose事件不会被第二次调用,我已经检查过了。此外,例外情况(因此,当网站离线时无法连接)是好的;我正在寻找的是一种方法来检测它并驱动setTimeoutcatch块的执行。

我最终使用了这种方法:

function reconnect() {
    console.log('Connection lost, trying to reconnect...');
    $.ajax({
        url: dummy_http_url_on_the_same_server
        success: function() {
            //Server is back online
            socket = new WebSocket(myUrl);
            socket.onerror = onErrorHandler;
            socket.onmessage = onMessageHandler;
            socket.onopen = onOpenHandler;
            socket.onclose = onCloseHandler;
        },
        error: function() {
            //Server is still down
            setTimeout(function() {
                reconnect();
            }, 1000);
        }
    });
}

由于Ajax调用有一个错误处理程序,我使用它们每X秒检查一次(在本例中,每1秒;在我的应用程序是一个随机数,以避免所有的客户端在同一时间连接,如果我的服务器是在线的。当它是,然后我实例化websocket,知道它肯定不会抛出异常,因为服务器再次启动。

不完全是我希望找到的,但至少它可以工作。

相关内容

最新更新