Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 网络浏览器永不停止';装载';连接到socket.io服务器时?_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript 网络浏览器永不停止';装载';连接到socket.io服务器时?

Javascript 网络浏览器永不停止';装载';连接到socket.io服务器时?,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我对socket.io有问题。我有一个nodejs服务器,它在运行socket.io服务器的同时充当Web服务器。此外,我还有一个连接到socket.io服务器的网页。该网页有一个按钮,单击该按钮时会发出时间更新请求。然后,socket.io服务器将以毫秒为单位的时间发送回网页,然后网页更新div以显示时间 这很好,但是,我注意到我的web浏览器(Chrome)在选项卡中有旋转加载图标,就像网页从未完全加载一样。它还显示“X”以停止加载页面 如果我单击“X”停止加载页面,我的软件将继续正常工作,

我对socket.io有问题。我有一个nodejs服务器,它在运行socket.io服务器的同时充当Web服务器。此外,我还有一个连接到socket.io服务器的网页。该网页有一个按钮,单击该按钮时会发出时间更新请求。然后,socket.io服务器将以毫秒为单位的时间发送回网页,然后网页更新div以显示时间

这很好,但是,我注意到我的web浏览器(Chrome)在选项卡中有旋转加载图标,就像网页从未完全加载一样。它还显示“X”以停止加载页面

如果我单击“X”停止加载页面,我的软件将继续正常工作,但我无法理解为什么页面从未完全加载

服务器代码:

var http = require("http");
var wrHandler = require("./webRequestHandler");
var io = require("socket.io");
var parser = require("./messageParser");

function start() {
    function onRequest(request, response){
        wrHandler.handle(request, response);        
    }

    var webserver = http.createServer(onRequest).listen(8888);
    console.log("Server has started.");



    var ioserver = io.listen(webserver);
    ioserver.set('log level', 3);
    ioserver.sockets.on('connection', function(socket){
        parser.parse(socket);
    });

}

exports.start = start;
Web请求处理程序:

var url = require("url");
var fs = require("fs");

function handle(request, response){
    var pathname = url.parse(request.url).pathname;
    console.log(pathname);

        switch(pathname){
            case '/':
                fs.readFile("../html/index.html", function(error, data){
                    if(error){
                        response.writeHead(404);
                        response.write("This file does not exist.");
                    }
                    else{
                        response.writeHead(200, {"Content-Type": "text/html"});
                        response.write(data, "utf8");
                    }
                });
                break;
            default:
                fs.readFile("../html" + pathname, function(error, data){
                    if(error){
                        response.writeHead(404, {"Content-Type": "text/html"});
                        response.write("<html><body>This file does not exist!</body></html>");
                        console.log("Test");
                    }
                    else{
                        response.writeHead(200, {"Content-Type": "text/html"});
                        response.write(data, "utf8");
                    }
                });
        }
}

exports.handle = handle;
HTML页面:

<html>
    <head>
        <script src="/socket.io/socket.io.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script>
        <script>
            var socket = io.connect();

            function getTime(){
                socket.emit('client_msg', {"msgID": "gettime"});
            }

            socket.on('timeupdate', function(data){
                $("#time").text(data.time);
            });
        </script>
    </head>
    <body>

        <input type="button" value="Get Server Time" onclick="getTime()"/>
        <div id="time">

        </div>
    </body>
</html>

var socket=io.connect();
函数getTime(){
emit('client_msg',{“msgID”:“gettime”});
}
socket.on('timeupdate',函数(数据){
$(“#time”).text(data.time);
});

我应该承认,我对node.js非常陌生,也不是最强的javascript开发人员。非常感谢您的任何批评/建议/提示。

在您的web请求处理程序中,最后,在开关块外执行response.end()

编辑:您必须在每次写入结束时执行此操作,因为您正在执行异步文件读取。如果使用readFileSync,则可以在结尾处编写一次

因此,您的文件如下所示:

    var url = require("url");
    var fs = require("fs");

    function handle(request, response){
        var pathname = url.parse(request.url).pathname;
        console.log(pathname);

            switch(pathname){
                case '/':
                    fs.readFile("../html/index.html", function(error, data){
                        if(error){
                            response.writeHead(404);
                            response.write("This file does not exist.");
                            response.end();
                        }
                        else{
                            response.writeHead(200, {"Content-Type": "text/html"});
                            response.write(data, "utf8");
                            response.end();
                        }
                    });
                    break;
                default:
                    fs.readFile("../html" + pathname, function(error, data){
                        if(error){
                            response.writeHead(404, {"Content-Type": "text/html"});
                            response.write("<html><body>This file does not exist!</body></html>");
                            response.end();
                            console.log("Test");
                        }
                        else{
                            response.writeHead(200, {"Content-Type": "text/html"});
                            response.write(data, "utf8");
                            response.end();
                        }
                    });
            }
    }

    exports.handle = handle;
var url=require(“url”);
var fs=要求(“fs”);
函数句柄(请求、响应){
var pathname=url.parse(request.url).pathname;
console.log(路径名);
交换机(路径名){
案例“/”:
fs.readFile(“../html/index.html”,函数(错误,数据){
如果(错误){
书面答复(404);
write(“此文件不存在。”);
response.end();
}
否则{
writeHead(200,{“内容类型”:“text/html”});
响应。写入(数据,“utf8”);
response.end();
}
});
打破
违约:
fs.readFile(“../html”+路径名,函数(错误,数据){
如果(错误){
writeHead(404,{“内容类型”:“text/html”});
write(“此文件不存在!”);
response.end();
控制台日志(“测试”);
}
否则{
writeHead(200,{“内容类型”:“text/html”});
响应。写入(数据,“utf8”);
response.end();
}
});
}
}
exports.handle=句柄;
注意response.end('foo');相当于response.write('foo');response.end()


另外,我知道这有点离题,但您应该尝试一下节点的快速框架。它使许多web请求处理变得简单,而不会过于固执己见。

这就成功了!!感谢您对express framework的建议。“现在就开始调查吧。”雷夫穆恩很乐意帮忙。你也不会后悔看了Express@RevMuun在服务器发送事件的情况下,如何停止无限加载?如果我结束响应,客户端将无法连接,因此无法接收数据流。。。。
    var url = require("url");
    var fs = require("fs");

    function handle(request, response){
        var pathname = url.parse(request.url).pathname;
        console.log(pathname);

            switch(pathname){
                case '/':
                    fs.readFile("../html/index.html", function(error, data){
                        if(error){
                            response.writeHead(404);
                            response.write("This file does not exist.");
                            response.end();
                        }
                        else{
                            response.writeHead(200, {"Content-Type": "text/html"});
                            response.write(data, "utf8");
                            response.end();
                        }
                    });
                    break;
                default:
                    fs.readFile("../html" + pathname, function(error, data){
                        if(error){
                            response.writeHead(404, {"Content-Type": "text/html"});
                            response.write("<html><body>This file does not exist!</body></html>");
                            response.end();
                            console.log("Test");
                        }
                        else{
                            response.writeHead(200, {"Content-Type": "text/html"});
                            response.write(data, "utf8");
                            response.end();
                        }
                    });
            }
    }

    exports.handle = handle;