nodejs流基類原始碼分析

2021-10-08 06:53:35 字數 1368 閱讀 7598

流是對資料生產,消費的一種抽象,今天先分析一下流基類的實現

const ee = require(

'events');

const util = require(

'util');

// 流的基類

function stream(

)// 繼承事件訂閱分發的能力

util.inherits(stream, ee)

;

流的基類只提供了乙個函式就是pipe。用於實現管道化。這個方法**比較多,分開說。

function ondata(chunk)}}

// 監聽data事件,可讀流有資料的時候,會觸發data事件

source.on(

'data', ondata)

;function ondrain()}

// 監聽drain事件,目的流可以消費資料了就會觸發該事件

dest.on(

'drain', ondrain)

;

這是管道化時流控實現的地方,主要是利用了write返回值和drain事件。

// 目的流不是標準輸出或標準錯誤,並且end不等於false

if(!dest._isstdio &&

(!options || options.end !=

= false))

// 兩個函式只會執行一次,也只會執行乙個

var didonend =

false

;function onend(

)function onclose(

)

這裡是處理源流結束和關閉後,通知目的流的邏輯。

// remove all the event listeners that were added.

function cleanup(

)function onerror(er)

} // 監聽流的error事件

source.on(

'error', onerror)

; dest.on(

'error', onerror)

; // 源流關閉或者沒有資料可讀時,清除註冊的事件

source.on(

'end', cleanup)

; source.on(

'close', cleanup)

; // 目的流關閉了也清除他註冊的事件

dest.on(

'close', cleanup)

;

這裡主要是處理了error事件和流關閉/結束/出錯時清除訂閱的事件。這就是流基類的所有邏輯。

通過原始碼分析nodejs執行緒架構

nodejs支援了程序之後,又支援了執行緒。類似瀏覽器端的web worker。因為nodejs是單執行緒的,但是底層又實現了乙個執行緒池,接著實現了程序,又實現了執行緒。一下變得混亂起來,我們要了解這些功能的實現原理,才能更好地使用他。上篇大致分析了程序的原理,這一篇來講一下執行緒的原理。只有了解...

CCTextureCache類原始碼分析 2

cctexturecache類原始碼分析 2 在cctexturecache類原始碼分析 1 中,我們分析了cctexturecache如何實現 紋理快取的,但是在分析的過程中,我們忽略了很多東西,比如ccimage類 原始碼分析 1 ccimage繼承自ccobject 2 成員變數,這些變數需要...

CCTextureCache類原始碼分析 3

cctexturecache類原始碼分析 3 1 在 1 中有提到過兩種特殊的格式,它們的處理方式和其他 格式的不同,這裡就分析一下這兩種特殊的格式的處理 對於.pvr 和 pkm 格式檔案需要特殊處理 if std string npos lowercase.find pvr else if st...