错误后,Websockets重新连接需要几秒钟

时间:2018-10-18 20:36:16

标签: javascript websocket

我正在尝试将websockets与Javascript一起使用,但我发现在连接失败后重新打开它的速度很慢:

function start_socket() {
    var ws = new WebSocket("ws://localhost:8000");
    ws.onopen = function() {
        console.log("Socket opened");
    };
    ws.onmessage = function(e) {
        console.log("Received message: " + e.data);
    };
    ws.onclose = function(e) {
        start_socket();
    };
}

start_socket();

我在localhost:8000上有一个非常简单的服务器,它在接收到连接后才发回一条消息。如果执行脚本时服务器已经在运行,则可以立即工作,但是如果我启动脚本然后启动服务器,则可能需要花费几秒钟来获取消息。

我尝试了另一个版本:

var ntries = 0;

function start_socket() {
    ws = new WebSocket("ws://localhost:8000");
    ws.onopen = function() {
        console.log("Socket opened");
    };
    ws.onmessage = function(e) {
        console.log("Received message: " + e.data);
    };
    ws.onclose = function(e) {
        ntries++;
        console.log(ntries);
        start_socket();
    };
}

start_socket();

在此版本中,我可以在日志中看到重试的数量相对缓慢地增加(有时在最后一次重试之后立即进行一次重试,有时需要几秒钟)。

最终版本:

var ntries = 0;
var is_open = false;

function start_socket() {
    ws = new WebSocket("ws://localhost:8000");
    ws.onopen = function() {
        is_open = true;
        console.log("Socket opened");
    };
    ws.onmessage = function(e) {
        console.log("Received message: " + e.data);
    };
    ws.onclose = function(e) {
        is_open = false;
        ntries++;
        console.log(ntries);
        start_socket();
    };

    setTimeout(function() {
        if(! is_open)
            ws.close();
    }, 500);
}

start_socket();

此处,重试次数每500毫秒按预期增加,但是在连接到服务器之前需要进行多次重试。有时候,即使服务器发送了消息,我什至都没有得到消息。

0 个答案:

没有答案