如何处理应用程序不运行时的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页面的其余部分一起打包。