Node.js NodeJs-套接字io-客户端系统自动重新连接

Node.js NodeJs-套接字io-客户端系统自动重新连接,node.js,sockets,io,client,reconnect,Node.js,Sockets,Io,Client,Reconnect,我想创建一个socket的io服务器客户端,在x和x秒内尝试连接到socket的io服务器,以验证is服务器是否已经启动 我的客户: src=http://localhost:90/socket.io/socket.io.js -加载脚本 var serverStatus = recconectToServer(); setInterval(function(){ if (serverStatus) { $(".resu

我想创建一个socket的io服务器客户端,在x和x秒内尝试连接到socket的io服务器,以验证is服务器是否已经启动

我的客户:

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未定义

但为什么会这样

注意:若我执行刷新客户端页面,当服务器运行时,客户端连接不会出现任何问题

更新: 真正的问题:与stackoverflow中存在的其他问题一样,事件连接_从sockets.io失败。为了解决这个问题,我做了下一个解决方案:

<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>
我的解决方案:

<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>
结论: 当服务器再次启动时,将被重定向到其他页面,在那里继续初始过程


我不知道这是否是最好的解决方案,如果有人有更好的解决方案,请告诉我。

当您的服务器关闭时,您无法为socket.io提供客户端脚本。因此没有定义io。 重新连接将不起作用,因为客户端从未尝试重新加载客户端脚本。 当服务器已经运行时,可以访问客户端脚本并定义io。 因此,您应该扩展您的reconnectToServer函数,以便在必要时尝试重新加载客户端脚本,例如

if(io === undefined)
    $(".results-server").append("<script src=\"http://localhost:90/socket.io/socket.io.js\"");

carlptr,正如您所说,这是逻辑,但要获取sockets.io.js,我需要使用jquery中的getScript。$。getScript;