2 回答

TA貢獻(xiàn)1921條經(jīng)驗 獲得超9個贊
node中有個流的概念,stream。代表數(shù)據(jù)流動方向:向內(nèi)流(可讀流),向外流(可寫流)。常用的流形式是文件,和tcp套接字。流是以快為單位發(fā)送數(shù)據(jù),通過監(jiān)聽‘data’事件,每一次得到一塊數(shù)據(jù)即進(jìn)行一次操作,當(dāng)數(shù)據(jù)結(jié)束時,監(jiān)聽end事件,執(zhí)行后續(xù)操作。
可讀流可以通過stream.pause();stream.resume()暫?;謴?fù)流。其中暫停流在寫文件時會停止從該文件中讀取數(shù)據(jù),如果是TCP套接字則不會讀取新的數(shù)據(jù)包,終止其他終端來的數(shù)據(jù)包??蓪懥魇且獜膎ode向外輸出的數(shù)據(jù),可以是TCP連接也可以是文件。node不會在io操作上阻塞,寫入的緩沖區(qū)如果被刷新,會發(fā)射drain事件,如果沒有被刷新,數(shù)據(jù)將被存儲在進(jìn)程內(nèi)存中。
TCP連接是雙向的,因此既是可讀流也是可寫流。以node作為服務(wù)器,則HTTP的請求是可讀流,響應(yīng)是可寫流。
通常在服務(wù)器端讀取本地數(shù)據(jù)是快速的,即可讀流是快速的。然而由于網(wǎng)絡(luò)原因,很多響應(yīng)即可寫流是無法保證的,如果請求太多(在服務(wù)器的讀寫范圍內(nèi)),而響應(yīng)太慢,會導(dǎo)致服務(wù)器的可寫流填滿。此時需要避免慢客戶端(前端響應(yīng)慢)的情況。
[javascript] view plain copy
fs = require('fs');
require('http').createServer(function (req,res) {
var rs = fs.createReadStream('./1.txt');
rs.on('data', function(data) {
if(!res.write(data)){
rs.pause();
}
});
rs.on('drain', function(data) {
rs.resume();
});
rs.on('end', function(){
res.end();
})
}).listen(8080,function(){
console.log('正在監(jiān)聽...');
});
也可以使用stream.pipe();pipe接受可寫流作為第一個參數(shù),由傳輸源調(diào)用。
fs = require('fs');
require('http').createServer(function (req,res) {
var rs = fs.createReadStream('./1.txt');
rs.pipe(res);
}).listen(8080,function(){
console.log('正在監(jiān)聽...');
});
[javascript] view plain copy
- 2 回答
- 0 關(guān)注
- 1641 瀏覽
添加回答
舉報