我一直在使用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>
有办法解决这类问题吗?
答案 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页面的其余部分打包在一起。