今天要記錄的是Stream,當我在研讀這個部分時,發現我的參考書介紹的比較簡略一點,但實際查資料也發現Stream在Nodjs占了舉足輕重的位置。所以今天會把研讀的重點做個整理。
在第DAY12:HTTP前情提要中,介紹Buffer處有短暫提到Stream。
Stream是Nodejs中的流式數據,而Stream模塊給予基本的API,而在前幾篇的實作中也都有Stream的影子在,
像是文件的讀取:
//HTTP請求文件(內容為轉換的狀態)
var http=require("http");
var fs=require("fs");
var server=http.createServer((req,res)=>
{
fs.readFile("./Heartbeat.txt",(err,data)=>
{
res.end(data);
});
});
server.listen(3000);
每接到一次請求,會把butterfly.txt
讀進記憶體,再取出給客戶端。
前提是,因為butterfly.txt
內容"小",若有一份內容"大"的要讀取,
依照前面所述的步驟,會消耗不少伺服器的記憶體,使用者等待的時間就會變長。
Stream總共有四個基礎類型以及常見的例子:
fs.creatReadStream()
)fs.creatWriteStream()
)net.Socket
)zlib.creatDflate()
)Stream都是Event(EventEmmitter)的實例。
其實也可以說Stream是Event與Buffer的混合版
。
還有一個很重要的東西!就是pipe方法!
pipe()
pipe就像是一個管道,把流與流之間都串連起來,發揮到最大的效用!
pipe會串連數據生產者與數據消耗者,可以多個數據串接。通常對於複製數據很方便!!
總結:
明天會繼續做Stream相關的例子,今天的部分,若有理解錯誤,再請指教!!
另外,附上我在理解Stream時,查閱到的一些網站,覺得很有幫助貼出來與大家分享,
他們比我的更專業解說得更清楚!非常感謝這些專業人士與網站。
Readable
、Writable
、pipe()
的介紹!也非常容易理解!