没有response.ett的Http Server在Node js中

时间:2017-09-17 09:45:56

标签: javascript node.js

我对Node js中的response.end感到困惑,我有以下代码。

const http = require("http");

http.createServer(function(req, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});

    setInterval(() => {
        response.write(new Date() + "\n");
    }, 1000)


}).listen(8080);

console.log("Service Running at 8080 127.0.0.1") 

现在上面的代码将在20秒或更长时间后开始在浏览器中打印日期,现在这段代码没有任何reponse.end,这很明显,因为如果有response.end()那么setIntervel内的代码永远不会执行。

但是这样做并没有做任何事情都需要永远加载页面。

const http = require("http");

http.createServer(function(req, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});

    response.write("Test");


}).listen(8080);

console.log("Service Running at 8080 127.0.0.1");

但如果我在上面的代码中添加response.end,它就可以正常工作。

所以任何人都可以解释这种奇怪的行为,为什么在没有setInterval的情况下使用response.end会有效。

1 个答案:

答案 0 :(得分:0)

你发出的问题是字面意思应该发生什么。浏览器向服务器询问数据,服务器开始发送数据,并且从不发出“我做完了”的信号,以便浏览器知道消息已完成。

这里的问题是您如何从服务器将数据导入浏览器。

  1. 设置websocket连接,以便将数据从服务器推送到浏览器。这就是它的用途。或者,
  2. 使用setTimeout或setInterval或其他东西在浏览器中设置重复调用,只需每隔一秒钟调用一次服务器,服务器响应所有实际结束的微小消息。 / LI>