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

我一直在使用socketIO进行大量testing,并且遇到了一些情况,我的节点应用程序只是处于脱机状态。 文档没有提供真正的洞察力。

所以如果我运行我的网站和节点应用程序是根本没有运行,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> 

有办法处理这种问题吗?

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

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

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

有几个事件可以绑定到。

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

有关暴露事件的完整列表,请查看这里: 公开的socket.io事件

编辑

啊,对不起。 我误解了你的问题。 我以为你想处理套接字服务器脱机时。 如果你想处理不能得到的socket.io客户端脚本,也许你可以检查如果socket为空或未定义和处理的想法。 然后在等待一段时间之后,还要启动一个setTimeout函数来尝试asynchronous加载脚本,然后检查socket是否仍未定义或为空。 或者,正如另一个答案所build议的那样,将socket.io客户端库与您的HTML页面的其余部分一起打包。