我想创建socket的io服务器的客户端,在x和x秒尝试连接socket的io服务器,验证服务器是否已经启动。
我在客户端有什么:
src =“http:// localhost:90 / socket.io / socket.io.js” - 加载脚本
var serverStatus = recconectToServer();
setInterval(function(){
if (serverStatus) {
$(".results-server").append("<p style='color:green; width:100%; float:left;'>connection up.</p>");
} else {
recconectToServer();
}
},3000);
function recconectToServer() {
$(".results-server").append("<p style='color:orange; width:100%; float:left;'>try connection.</p>");
try {
var socket = new io.connect("http://localhost:90");
return true;
} catch(err) {
$(".results-server").append("<p style='color:red; width:100%; float:left;'>server down.</p>");
console.log(" Erro = "+ err);
return false;
}
}
情况:
如果客户端在服务器关闭时尝试连接,我会收到以下消息: “ReferenceError:io未定义”
这是正常的,因为服务器已关闭,然后我尝试连接时启动服务器和客户端(没有刷新页面)继续收到此消息“ReferenceError:io未定义”
但为什么会这样呢?
注意:如果我执行刷新客户端页面,当服务器正在运行时,客户端连接没有任何问题。
更新: 真正的问题:来自sockets.io的connected_failed事件不起作用,就像stackoverflow中存在的其他问题一样。所以为了解决这个问题,我做了下一个解决方案:
我的解决方案:
<script src="http://localhost:90/socket.io/socket.io.js"></script>
<script>
/**
* timer that try make a new connection to node server
*/
setInterval(function(){
if (autoReconnect()) {
window.location.href="client.html";
} else {
autoReconnect();
}
},5000);
/**
* This functions try make connection to node server
*/
function autoReconnect(){
try {
$.getScript("http://localhost:90/socket.io/socket.io.js");
var socket = new io.connect('http://localhost:90');
return true;
} catch(err) {
return false;
}
}
</script>
结论: 当服务器再次启动时,将重定向到其他页面,继续初始过程。
我不知道这是否是最好的解决方案,如果有人有更好的解决方案,请告诉我。
答案 0 :(得分:0)
当您的服务器关闭时,您无法为socket.io提供客户端脚本。因此io没有定义。 重新连接将不起作用,因为客户端从不尝试重新加载客户端脚本。 当服务器已在运行时,可以访问客户端脚本并定义io。 因此,如果需要,您应该扩展reconnectToServer函数以尝试重新加载客户端脚本,可能类似
if(io === undefined)
$(".results-server").append("<script src=\"http://localhost:90/socket.io/socket.io.js\"");