莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          Node.js Undocumented(1)

          Posted on 2011-05-31 00:33 dennis 閱讀(3533) 評論(7)  編輯  收藏 所屬分類: node.js

              node.js
          的API文檔做的不是很好,有些部分干脆沒文檔,最終還是要看代碼才能解決。我這里將記錄下看源碼過程中看到的一些API并補充一些測試?yán)印T谕?a >node.js的朋友可以瞧瞧。


              process.reallyExit(status)

              用于進(jìn)程主動退出,status設(shè)置退出的狀態(tài)碼。請注意,reallyExit退出的進(jìn)程不會調(diào)用'exit'事件,下面的代碼不會有任何輸出:
          var interval=setInterval(function(){
              process.reallyExit(
          1);
          },
          1000);
          process.on('exit',
          function(){
              console.log(
          "hello");
          });

             process._kill(pid,sig)

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

             process.binding(name)

             非常有用的方法,很奇怪API文檔里竟然沒提到,這個方法用于返回指定名稱的內(nèi)置模塊。例如下面的代碼將打印node_net模塊所有的可以調(diào)用的方法或變量(很多是文檔沒有提到的并且沒有exports的,后續(xù)我會介紹下):
          var binding=process.binding('net');
          console.dir(binding);

             process.dlopen(filename,target)

             看源碼注釋說是用來動態(tài)加載node.module的動態(tài)鏈接庫的,以后嘗試寫擴(kuò)展的時候也許可以嘗試一下。

             定時器
             Node.js的定時器模塊的實現(xiàn)是有講究的,對于超時時間after<=0的callback,會在內(nèi)部new一個Timer并start(本質(zhì)是使用libev的timer機(jī)制);但是對于after>0的callback,卻不是這樣。因為在實際應(yīng)用中,大多數(shù)定時器事件的超時時間都是一樣的,如果每個事件都new一個Timer并start,代價太高。因此node.js采用了一個類似哈希表的方案,將相同after超時時間的定時器事件組織成鏈表,以after為key,以鏈表為value整體構(gòu)成一張表。每個鏈表只new一個Timer,這個Timer負(fù)責(zé)整個鏈表的定時器事件,當(dāng)某個事件超時調(diào)用后,利用ev_timer_again來高效地重新設(shè)置超時時間。
             如果你確實希望對于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
              設(shè)定timer的回調(diào)函數(shù),當(dāng)超時的時候調(diào)用。

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

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

          評論

          # re: Node.js Undocumented(1)  回復(fù)  更多評論   

          2011-05-31 01:38 by flyinweb
          multi_node中有幾個方法在api中都沒有,我也是看源碼才看到。
          如:process.binding、socketpair

          # re: Node.js Undocumented(1)  回復(fù)  更多評論   

          2011-05-31 08:23 by tony.li
          請問現(xiàn)在傳統(tǒng)的前端語言做后臺開發(fā),后端語言做前端開發(fā),有什么好處

          # re: Node.js Undocumented(1)  回復(fù)  更多評論   

          2011-05-31 08:57 by dennis
          @flyinweb
          我也是,發(fā)現(xiàn)很多沒看到過的api,最后只有去源碼了,這個系列想做個總結(jié)和示例。

          # re: Node.js Undocumented(1)  回復(fù)  更多評論   

          2011-05-31 08:58 by dennis
          @tony.li
          node.js吸引人的地方在于用函數(shù)式的方式編寫高性能的異步網(wǎng)絡(luò)程序,門檻不高,并且開發(fā)效率和運行效率都不錯。

          # re: Node.js Undocumented(1)  回復(fù)  更多評論   

          2011-05-31 10:33 by 代孕
          這方面我真的不怎么懂啊……

          # re: Node.js Undocumented(1)  回復(fù)  更多評論   

          2011-05-31 11:25 by flyinweb
          @dennis
          不過在將這些函數(shù)用于實際開發(fā)時需要權(quán)衡一下。
          我從V0.2.2開始用(那個時候API文檔中的函數(shù)更少),用了幾個API中沒有的函數(shù),到了V0.3.1,改為Deprecated了,到了V0.3.7直接消失了。

          # counterstrikegowallhack22685  回復(fù)  更多評論   

          2015-03-27 15:11 by Hello There. I found your blog using msn. This is
          Hello There. I found your blog using msn. This is a very well written article. I will make sure to bookmark it and come back to read more of your useful info. Thanks for the post. I will definitely return.
          主站蜘蛛池模板: 连南| 甘德县| 满城县| 新密市| 马山县| 新河县| 五大连池市| 青龙| 鹰潭市| 理塘县| 新闻| 乌恰县| 桐柏县| 三门峡市| 江华| 伊宁市| 临洮县| 通渭县| 绥江县| 古丈县| 荣昌县| 池州市| 饶阳县| 和田市| 通城县| 安义县| 商洛市| 福建省| 清河县| 郴州市| 河东区| 滕州市| 雷山县| 金平| 金溪县| 电白县| 内江市| 靖远县| 元氏县| 阿巴嘎旗| 日照市|