閱讀691 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Node.js Undocumented(1)

的API文檔做的不是很好,有些部分幹脆沒文檔,最終還是要看代碼才能解決。我這裏將記錄下看源碼過程中看到的一些API並補充一些測試例子。在玩node.js的朋友可以瞧瞧。


    process.reallyExit(status)

    用於進程主動退出,status設置退出的狀態碼。請注意,reallyExit退出的進程不會調用'exit'事件,下麵的代碼不會有任何輸出:
var interval=setInterval(function(){
    process.reallyExit(
1);
},
1000);
process.on('exit',
function(){
    console.log(
"hello");
});

   process._kill(pid,sig)

   用於給指定pid的進程發送指定信號(類似kill命令),這是個“private”方法,你需要慎重使用,下麵的代碼會殺死自身的進程:
var pid=process.pid
process._kill(pid,
9);

   process.binding(name)

   非常有用的方法,很奇怪API文檔裏竟然沒提到,這個方法用於返回指定名稱的內置模塊。例如下麵的代碼將打印node_net模塊所有的可以調用的方法或變量(很多是文檔沒有提到的並且沒有exports的,後續我會介紹下):
var binding=process.binding('net');
console.dir(binding);

   process.dlopen(filename,target)

   看源碼注釋說是用來動態加載node.module的動態鏈接庫的,以後嚐試寫擴展的時候也許可以嚐試一下。

   定時器
   Node.js的定時器模塊的實現是有講究的,對於超時時間after<=0的callback,會在內部new一個Timer並start(本質是使用libev的timer機製);但是對於after>0的callback,卻不是這樣。因為在實際應用中,大多數定時器事件的超時時間都是一樣的,如果每個事件都new一個Timer並start,代價太高。因此node.js采用了一個類似哈希表的方案,將相同after超時時間的定時器事件組織成鏈表,以after為key,以鏈表為value整體構成一張表。每個鏈表隻new一個Timer,這個Timer負責整個鏈表的定時器事件,當某個事件超時調用後,利用ev_timer_again來高效地重新設置超時時間。
   如果你確實希望對於after>0的定時器也每次new一個Timer來處理,那也可以做到,這就要用到前麵提到的process.binding方法來獲取timer模塊,一個例子:
var Timer = process.binding('timer').Timer;

var timer=new Timer();
timer.callback
=function(){
    console.log(
"callback called");
};
timer.start(
1000,0);

  
    timer.callback
    設定timer的回調函數,當超時的時候調用。

    timer.start(after,repeat)
    啟動定時器,在after毫秒之後調用超時回調;如果repeat==0,則自動停止定時器;如果repeat>0,則在repeat毫秒之後再次調用callback,以repeat毫秒為間隔不斷重複下去。

    ps.這篇blog剛好是我的第499篇blog,不出意外,第500篇還是繼續介紹node.js。

文章轉自莊周夢蝶  ,原文發布時間2011-05-31

最後更新:2017-05-18 18:04:50

  上一篇:go  node-leveldb的memcached adapter
  下一篇:go  Push or pull?