NodeJS學習三之API

Node採用V8引擎處理JavaScript腳本,最大特點就是單線程運行,一次只能運行一個任務。這導致Node大量採用異步操作(asynchronous opertion),即任務不是馬上執行,而是插在任務隊列的尾部,等到前面的任務運行完後再執行。由於這種特性,某一個任務的後續操作,往往採用回調函數(callback)的形式進行定義。so也不適用於try catch捕獲錯誤,約定回調函數的第一個參數爲爲error對象。

  • Node約定,如果某個函數需要回調函數作爲參數,則回調函數是最後一個參數。另外,回調函數本身的第一個參數,約定爲上一步傳入的錯誤對象。

Buffer

V8引擎將Buffer對象佔用的內存,解釋爲一個整數數組,而不是二進制數組。所以,new Uint32Array(new Buffer([1, 2, 3, 4])),生成的Uint32Array數組是一個4個成員的Uint32Array數組,而不是隻有單個成員([0x1020304]或者[0x4030201])。

注意,這時二進制數組所對應的內存是從Buffer對象拷貝的,而不是共享的。二進制數組的buffer屬性,保留指向原Buffer對象的指針。

二進制數組的操作,與Buffer對象的操作基本上是兼容的,只有輕微的差異。比如,二進制數組的slice方法返回原內存的拷貝,而Buffer對象的slice方法創造原內存的一個視圖(view)。即返回的新 buffer,是對原 buffer 某區段的引用,或者說新 buffer 是指針,它指向原 buffer 的某區段

Child Process

child_process模塊用於新建子進程。子進程的運行結果儲存在系統緩存之中(最大200KB),等到子進程運行結束以後,主進程再用回調函數讀取子進程的運行結果。

child_process.exec(command, [options], callback)
child_process.spawn(command, [args], [options])

cluster

cluster模塊允許設立一個主進程和若干個worker進程,由主進程監控和協調worker進程的運行。worker之間採用進程間通信交換消息,cluster模塊內置一個負載均衡器,採用Round-robin算法協調各個worker進程之間的負載。運行時,所有新建立的鏈接都由主進程完成,然後主進程再把TCP連接分配給指定的worker進程

Events

Events模塊的作用,還在於其他模塊可以部署EventEmitter接口,從而也能夠訂閱和發佈消息。

var  eventEmitter = require('events').EventEmitter;

function Dog(name) {
    this.name = name;
}

Dog.prototype = Object.create(eventEmitter.prototype);

var simon = new Dog('simon');

simon.on('bark', function() {
    console.log(this.name + ' barked');
});

setInterval(function() {
    simon.emit('bark');
},500);

上面代碼新建了一個構造函數Dog,然後讓其繼承EventEmitter,因此Dog就擁有了EventEmitter的接口。最後,爲Dog的實例指定bark事件的監聽函數,再使用EventEmitter的emit方法,觸發bark事件。
Node內置模塊util的inherits方法,提供了另一種繼承EventEmitter的寫法。

事件類型
Events模塊默認支持兩個事件。
newListener事件:添加新的回調函數時觸發。
removeListener事件:移除回調時觸發。

參考
nodejs官網:https://nodejs.org/dist/latest-v4.x/docs/api/querystring.html
阮一峯Nojs.API中文版:http://javascript.ruanyifeng.com/nodejs/

發佈了48 篇原創文章 · 獲贊 29 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章