Socket.io客户端火灾事件如果无法连接到服务器

时间:2014-02-06 18:59:10

标签: javascript node.js socket.io

我正在为我运行socket.io的Amazon EC2上运行一个简单的node.js服务器。我正在研究一个在两个客户端之间发送数据的chrome扩展。但是,如果我使服务器脱机,则客户端不会尝试自动重新连接。我想实现这个功能。当我socket = io.connect("http://xxx.xxx.xxx.xxx:xxx")如果它找不到指定IP地址和端口的服务器时,如何让它触发一个事件,使其进入递归循环,直到它可以?这样的事情存在吗?

function connect() {
    socket = io.connect("http://123.456.789.1011:1337");
    socket.on('server_not_found', function() {
        connect();
    });
}

1 个答案:

答案 0 :(得分:2)

从socket.io wiki看起来有一个你可以收听的connect_failed事件(https://github.com/LearnBoost/socket.io/wiki/Exposed-events)。该事件并没有为我开火(参见https://github.com/LearnBoost/socket.io-client/issues/375)但如果连接失败,则会触发错误事件,您可以检查套接字上的连接状态。您可以尝试任何一种,看看哪种方法更有效。

示例可能如下所示:

function connect() {
    var socket = io.connect("http://123.456.789.1011:1337"),
        timer;

    socket.on('error', function() {
        // wait 5 seconds then try again
        if (!socket.socket.connected) {
            timer = window.setInterval(function() { connect() }, 5000);
        }
    });

    socket.on('connect', function() {
        // we've connected so clear the timer
        window.clearInterval(timer);
    });
}