2014-02-06 44 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

相關問題