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
我得到了所需的延迟。输出:
Hello <2 seconds> World
但在浏览器中,整个内容会在 2 秒后加载。
Hell World <together after 2s>
我究竟做错了什么 ?
以下代码段与客户端打开响应流并将其流式传输到客户端。因此,在 curl 中,您将首先收到“Hello”,并在 2 秒后收到“World”(因为您设置了 2000 毫秒的计时器)。
res.write('Hello\n');
setTimeout(function() {
res.end(' World\n');
},2000);
但浏览器只有在收到完整的响应流后才会呈现它。
这就是为什么您会在 2 秒后收到响应。
这完全是浏览器的行为。在收到整个响应之前,它不会使用响应流。一旦流关闭,整个响应就可以使用了。然而,在 PHP 中,有一种方法可以在需要时刷新响应流。
但是,如果您经常寻找流数据,这并不是最好的方法。我宁愿建议你使用彗星技术 http://en.wikipedia.org/wiki/Comet_%28programming%29 or 网络套接字 http://socket.io/.
我希望这就是您正在寻找的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)