2012-05-11 44 views
0

我正在最新的Ubuntu上運行Node.js。我得到了下面的代碼:基本node.js createServer和定時輸出無法正常工作

var http = require('http'); 

var s = http.createServer(function(req, res){ 
    res.writeHead(200, {'content-type':'text/html'}); 
    res.write('Hello '); 

    setTimeout(function(){ 
     res.end('world'); 
    }, 3000); 
}); 

s.listen(8000); 

我通過執行「node server.js」,這是很好的。但問題在於,出於某種原因,在調用setTimeout之前不會輸出任何內容 - 即請求後3秒。

我或多或少地沿着http://www.youtube.com/watch?v=jo_B4LTHi3I(見17:08)的例子,但我無法得到像他一樣的「流式」類結果(他的瀏覽器首先輸出「Hello」,然後「世界「3秒鐘後)。

我試過不同的瀏覽器,甚至試圖在終端中「捲曲」,就像他在剪輯上一樣。但都是一樣的。

默認情況下會打開某種輸出緩衝,或者它爲什麼會這樣操作?

在此先感謝!

回答

1

這是因爲瀏覽器僅在接收到3秒後的res.end()後呈現頁面。在對視頻通知中所示的實現的情況下,該行讀取

res.write('Hello \n'); 

使用捲曲,斷行導致「你好」被輸出到控制檯和「世界」的3秒的滯後之後打印。

在這兩種情況下,即使用res.write('Hello')或res.write('Hello \ n'),瀏覽器僅在接收到res.end()後才呈現它。此外,如果瀏覽器沒有收到res.end(),響應將超時並且不會顯示任何內容。