2013-04-24 113 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