2013-12-23 32 views
1

我一直在使用socketIO进行大量测试,并且遇到了处理应用程序仅处于脱机状态的情况。该文档没有提供有关此问题的真正见解。如何处理应用程序未运行时的socketIO

所以,如果我跑我的网站和应用程序节点根本就没有运行,执行console.log给出:

GET http://[url]:[port]/socket.io/socket.io.js

Uncaught ReferenceError: io is not defined

这并不奇怪,怎么过什么,我不明白是如何处理这些错误,并简单地让脚本尝试重新连接,直到它终于重新连接(如果曾经)。

我的剧本是这样的:

<script src="http://[url]:[port]/socket.io/socket.io.js"></script> 
<script> 
    windows.onload = function() 
    { 
     socketio = io.connect("http://[url]:[port]"); 

     socketio.on('connecting', function() { 
       console.log('trying to connect'); 
     });    

     socketio.on('connect', function() { 
        console.log('connected'); 
     });  
    } 
</script> 

有没有一种方法来处理这类问题?

回答

4

当服务器处于脱机状态时,用于加载Socket.io客户端库的初始<script>标记失败,因此您永远无法获得io对象。

要重试,您可以添加一个新的<script>标签以再次加载相同的URL并查看是否成功。

更好的是,将socket.io客户端库复制到托管您的HTML的服务器,以便始终加载该脚本。然后您可以简单地处理来自io.connect()的连接错误。

+0

如果我添加一个新的

0

有几个事件可以绑定到。

socket.on("connect_failed", function() { 
    // Do whatever you wanted to do on failure 
}); 

对于暴露事件的完整列表,点击这里:exposed socket.io events

编辑

啊,我很抱歉。我误解了你的问题。我以为你想在socket服务器脱机时处理。如果你想处理无法获取socket.io客户端脚本,也许你可以检查socket是否为null或未定义,并处理这种想法。然后还会启动一个setTimeout函数,在等待期过后尝试异步加载脚本,然后检查socket是否仍未定义或为空。或者,如其他答案所示,将socket.io客户端库与您的HTML页面的其余部分一起打包。

+0

如果节点应用程序未运行,我不相信它会首先收到'connect_failed' .. – Sir

+0

啊,我很抱歉。我误解了你的问题。你是对的,你没有'套接字'来调用开始的事件。正如另一个答案所说,将客户端库打包到HTML页面将会是一个更好的主意。 – zero298

相关问题