我正在为我运行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();
});
}
答案 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);
});
}