2017-07-30 166 views
1

我剛剛開始觀看一些節點教程,我想幫助瞭解從http.createServer()獲取的響應和請求流。響應&請求是流,這是否意味着比Node.js發送和接收塊中的數據?Node.js HTTP模塊:響應+請求

例如,如果我稱爲

res.write("test1"); 

res.write("test2"); 

res.end(); 

將它只能寫二者的那些東西,當我呼叫結束()或將其沖洗到流併發送至客戶端發出請求作爲和當我打電話寫()?

另一個詳細說明我的問題的例子是,如果我有一個有很多純文本數據的txt文件,那麼我會設置一個讀取流,將數據從該文件管道傳輸到res對象,它一旦一切都在緩衝區中。

我想我的問題也適用於請求對象。例如,請求的主體是逐個數據包構建並流式傳輸到服務器,還是一次發送,而節點只是選擇讓我們使用流來訪問它。

非常感謝!

+0

這取決於。 ... https://stackoverflow.com/questions/18857693/does-express-js-support-sending-unbuffered-progressively-flushed-responses –

回答

1

第一次調用response.write()時,它會將緩存的頭信息和正文的第一個塊發送給客戶端。第二次調用response.write(),Node.js假定數據將被流式傳輸,並分別發送新的數據。也就是說,響應被緩衝到身體的第一部分。

full foc

所以基本上,如果你.WRITE()一小塊數據,可以緩衝,直到那裏有一個完整的塊或.END()被調用。如果.write()已經有一個塊的大小,它將立即傳輸。

+0

我明白了,所以讓我澄清,如果我response.write()兩次,然後節點將分別發送第二塊數據。這就是爲什麼我們有res.end(),所以它知道我什麼時候不會再發送塊,並且可以關閉連接。我想我除了澄清之外唯一的其他問題也是緩存和默認流式傳輸的請求?我認爲是這樣,我只需要聽('數據')。 – user2814533

+0

@ user2814533是 –

+0

嗯,我可以再問一件事。當我不包括res.end()和我訪問本地主機:3000我什麼也沒有得到,但是當我把.end()它顯示我寫的數據;然而,基於你所說的「第一次調用response.write()時,它會將緩衝的頭信息和正文的第一部分發送給客戶端。」不管是否包含res.end(),都不應該得到第一個res.write()的數據? – user2814533