<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢(mèng)蝶

    生活、程序、未來(lái)
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理

    Node.js Undocumented(1)

    Posted on 2011-05-31 00:33 dennis 閱讀(3526) 評(píng)論(7)  編輯  收藏 所屬分類(lèi): node.js

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


        process.reallyExit(status)

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

       process._kill(pid,sig)

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

       process.binding(name)

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

       process.dlopen(filename,target)

       看源碼注釋說(shuō)是用來(lái)動(dòng)態(tài)加載node.module的動(dòng)態(tài)鏈接庫(kù)的,以后嘗試寫(xiě)擴(kuò)展的時(shí)候也許可以嘗試一下。

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

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

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

    評(píng)論

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

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

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

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

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

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

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

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

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

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

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

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

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

    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.

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲导航深夜福利| 一级毛片大全免费播放下载| 性xxxx视频播放免费| 老司机午夜在线视频免费| 国产成人精品日本亚洲专区61| 伊人久久免费视频| 亚洲AV无码专区亚洲AV桃| 亚洲精品乱码久久久久久蜜桃不卡| 无码少妇精品一区二区免费动态| 亚洲日韩国产一区二区三区在线 | 亚洲网站免费观看| 暖暖免费高清日本中文| 国产成人免费ā片在线观看老同学| 久久狠狠爱亚洲综合影院| 国产亚洲精久久久久久无码77777| av免费不卡国产观看| 国产99久久久久久免费看| 亚洲国产中文在线视频 | 久久夜色精品国产噜噜亚洲a| 亚洲日本韩国在线| 99视频全部免费精品全部四虎| 黄色毛片免费观看| 亚洲一级视频在线观看| 国产精品亚洲视频| 四虎影视免费在线| 最近2022中文字幕免费视频 | 成人免费午夜无码视频| 久久嫩草影院免费看夜色| 亚洲色大成WWW亚洲女子| 亚洲AV无码一区二区三区系列 | 国产免费伦精品一区二区三区| 国内精品久久久久影院亚洲 | 亚洲资源在线观看| 亚洲中文字幕丝袜制服一区| 成人免费看黄20分钟| 6080午夜一级毛片免费看6080夜福利| 深夜久久AAAAA级毛片免费看| 在线观看亚洲AV日韩AV| 亚洲黄色网址在线观看| 国产亚洲精品a在线无码| 国产jizzjizz免费视频|