Node.js 节点JS,延迟响应
启动上述服务器后,我运行Node.js 节点JS,延迟响应,node.js,Node.js,启动上述服务器后,我运行 var http = require('http'); var s = http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('Hello\n'); setInterval(function() { res.end(' World\n'); },2000)
var http = require('http');
var s = http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('Hello\n');
setInterval(function() {
res.end(' World\n');
},2000);
console.log("Hello");
});
s.listen(8080);
我得到了规定的延迟。输出:
curl http://127.0.0.1:8080
你好,世界
但在浏览器中,整个内容在2秒钟后加载
Hello <2 seconds> World
地狱世界
我做错了什么?下面的一段代码打开了客户端的响应流,并将其传输到客户端。因此,在curl中,您将首先得到“Hello”和2秒后的“World”(因为您已经设置了2000毫秒的间隔) 但是浏览器只有在接收到完整的响应流后才会呈现它。 这就是为什么你会在2秒后得到响应
Hello <2 seconds> World
这完全是浏览器的行为。在收到整个响应之前,它不会使用响应流。一旦流关闭,整个响应就可以使用了。然而,在PHP中,如果需要,有一种方法可以刷新响应流
但是,如果您经常寻找流式数据,这并不是最好的方法。我建议你使用或
我希望这就是您想要的。浏览器行为不同于
curl
。在您调用res.end()
之前,浏览器不会呈现页面。因此,如果您想在延迟后加载web页面的一部分,则需要通过或ajax请求分别加载第二部分。我建议使用websocets。看一看,这是一种在node.js中使用WebSocket的简单方法。提示:-“res.end()”将生成一个完整的结果,并提供给浏览器。所以,只要调用end方法,就会向浏览器发出响应。我知道这不是答案,但它可能会有所帮助。但有没有任何方法可以在浏览器中使用node伪造此功能?
res.write('Hello\n');
setInterval(function() {
res.end(' World\n');
},2000);
// simulate delay response
app.use((req, res, next) => {
setTimeout(() => next(), 2000);
});