2010-09-25 82 views
0

我知道使用Node.js可以流式傳輸數據。Node.js流不起作用

但是,爲什麼沒有這個代碼工作:

var sys = require('sys'), 
http = require('http'); 
http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.write("hello"); 
    res.write("world"); 
}).listen(80); 

看來,我必須有res.end()最後res.write()後,能夠將數據發送到瀏覽器。

回答

1

實際上,它似乎更像是在瀏覽器呈現它之前輸出必須是特定的大小。可能是瀏覽器端的緩衝區。當您發送res.end()時,瀏覽器會刷新此緩衝區並直接呈現緩衝區中的所有內容。但是,如果沒有發送res.end(),瀏覽器將等待直到其緩衝區被填充。

我試着用Firefox和curl試驗下面的代碼塊。

var sys = require('sys'), 
http = require('http'); 
http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.write("hello\n"); 
    for (var i = 0; i < 100; i++) { 
     setTimeout(function() { 
     res.write("world lotsa text here lotsa text\n"); 
     }, 400*i); 
    } 
}).listen(3000); 

您可以通過上面的代碼運行的節點之後前往http://localhost:3000/自己嘗試一下。

然後我用curl試了同樣的東西,每一行都從服務器發送出來。

我使用curl命令很乾脆:

curl http://localhost:3000/ 

注意我在res.write爲捲曲插入新行會等待新行輸出到標準輸出之前。

2

我認爲塊在發送前必須是一定的大小。