2014-02-06 42 views
0

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

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

回答

2

从socket.io维基看起来还有就是你可以听(https://github.com/LearnBoost/socket.io/wiki/Exposed-events)一CONNECT_FAILED事件。该事件对我而言并未触发(请参阅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); 
    }); 
} 
+0

工作就像一个魅力! :) – Globmont

+0

太棒了!乐意效劳 :) – mcbex

相关问题