2013-04-24 88 views
1

我想創建套接字的IO服務器的客戶端,其中x和x秒嘗試做出插座的IO服務器的連接,以驗證是服務器已經啓動。的NodeJS - 插座IO - 客戶端系統自動重新連接

我在客戶端什麼:

SRC = 「HTTP://本地主機:90/socket.io/socket.io.js」 - 負載腳本

var serverStatus = recconectToServer(); 

     setInterval(function(){ 

      if (serverStatus) { 
       $(".results-server").append("<p style='color:green; width:100%; float:left;'>connection up.</p>"); 
      } else { 
       recconectToServer(); 
      } 
     },3000); 


     function recconectToServer() { 
      $(".results-server").append("<p style='color:orange; width:100%; float:left;'>try connection.</p>"); 
      try { 
       var socket = new io.connect("http://localhost:90"); 
       return true; 
      } catch(err) { 
       $(".results-server").append("<p style='color:red; width:100%; float:left;'>server down.</p>"); 
       console.log(" Erro = "+ err); 
       return false; 
      } 
     } 

情況:

如果客戶試圖連接時,服務器關閉我收到此消息: 「的ReferenceError:IO沒有定義」

這是正常的,因爲服務器關閉,然後我啓動服務器和客戶端嘗試進行連接(無需刷新頁面)後繼續收到此消息「的ReferenceError:IO沒有定義」

但爲什麼出現這種情況?

注:如果我執行刷新客戶端頁面,服務器運行時,客戶端連接沒有任何問題。

更新: 真正的問題:從sockets.io不工作connected_failed,與其他人一樣的問題存在於計算器的事件。因此,對於解決這個我做了一個解決方案:

我的解決辦法:

<script src="http://localhost:90/socket.io/socket.io.js"></script> 
     <script> 
      /** 
      * timer that try make a new connection to node server 
      */ 
      setInterval(function(){ 
       if (autoReconnect()) { 
        window.location.href="client.html"; 
       } else { 
        autoReconnect(); 
       } 
      },5000); 

      /** 
      * This functions try make connection to node server 
      */ 
      function autoReconnect(){ 
       try { 
        $.getScript("http://localhost:90/socket.io/socket.io.js"); 
        var socket = new io.connect('http://localhost:90'); 
        return true; 
       } catch(err) { 
        return false; 
       } 
      } 
    </script> 

結論: 當服務器再次成爲了起來,會重定向到其他頁面,在這裏繼續的初始過程。

我不知道這是不是最好的解決辦法,如果有人有一個更好的,請告訴我。

回答

0

當你的服務器已關閉,你不能爲客戶端腳本socket.io。因此io沒有被定義。 重新連接將無法工作,因爲客戶端永遠不會嘗試重新加載客戶端腳本。 服務器已經運行時,可以訪問客戶端腳本並定義io。 因此,你應該延長您的reconnectToServer功能嘗試,如果neccessary重新加載客戶端腳本,或許像

if(io === undefined) 
    $(".results-server").append("<script src=\"http://localhost:90/socket.io/socket.io.js\""); 
+0

carlptr,就像你說的是邏輯,但要獲得我需要用的sockets.io.js來自jquery的getScript。 $ .getScript( 「HTTP://本地主機:90/socket.io/socket.io.js」); – 2013-05-07 22:16:22

相關問題