应用程序未运行时如何处理socketIO

时间:2013-12-23 21:02:02

标签: javascript node.js

我一直在使用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>

有办法解决这类问题吗?

2 个答案:

答案 0 :(得分:4)

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

要重试,您可以添加新的<script>标记,以再次加载相同的网址,看看是否成功。

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

答案 1 :(得分:0)

您可以绑定一些事件。

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

有关公开事件的完整列表,请点击此处:exposed socket.io events

修改

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