2012-01-25 53 views
0

我想在這裏按照教程:爲什麼response.write似乎在Node.js中阻止我的瀏覽器?

http://nodetuts.com/tutorials/2-webtail-nodejs-child-processes-and-http-chunked-encoding.html#video

下面的代碼工作

var http = require('http'); 
var spawn = require('child_process').spawn; 

http.createServer(
function (request, response) { 
    response.writeHead(200, { 
     'Content-Type':'text/plain' 
    }); 
    var tail_child = spawn('tail', ['-f', 'temp.txt']); 

    request.connection.on('end', function() { 
     tail_child.kill(); 
    }); 

    tail_child.stdout.on('data', function (data) { 
     console.log(data.toString()); 
     response.end(data.toString()); 

    }); 

}).listen(9000); 

但是瀏覽器沒有收到更新爲temp.txt。如果我更換

response.end(data.toString()); 

response.write(data.toString()); 

這似乎阻止,並沒有什麼瀏覽器中呈現。

編輯:我想瀏覽器實時連續地顯示任何追加到文本文件按照本教程

+0

我已經做了一個編輯來澄清 – deltanovember

+0

是的,因爲如果你永遠不會調用response.end(),那麼永遠不會發送響應。 –

+0

在教程中沒有response.end(),但新的附加信息似乎'流'到瀏覽器 – deltanovember

回答

2

你應該嘗試使用傳輸編碼捲曲,而不是檢驗出來:分塊。許多Web瀏覽器不會以塊的形式呈現內容,可能是因爲以這種方式呈現HTML效率不高。如果您將足夠的數據放入響應中,最終瀏覽器可能會像您期望的那樣開始渲染它,但這不是我通常使用的解決方案。

如果您想以您希望的方式將數據流式傳輸到Web瀏覽器,那麼我會使用websockets或可能對您的流式頁面發出的ajax調用,因爲它會提供html,因爲ajax調用應該每個塊的火災事件。

+0

我已經測試過了,如果包含''Transfer-Encoding':'chunked''頭並且推入了足夠的數據,那麼原始問題中的代碼可以很好地與'response.write()'一起工作。嘗試添加更多更多數據'temp.txt'使用'less temp.txt >> temp.txt'。我還加入了'Content-Type':'text/plain; charset = UTF-8'',但不確定這是否有所作爲。 –

相關問題