庄周梦蝶

生活、程序、未来
   :: 首页 ::  ::  :: 聚合  :: 管理

Node.js Undocumented(1)

Posted on 2011-05-31 00:33 dennis 阅读(3507) 评论(7)  编辑  收藏 所属分类: node.js

    node.js
的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。
   

评论

# re: Node.js Undocumented(1)  回复  更多评论   

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

# re: Node.js Undocumented(1)  回复  更多评论   

2011-05-31 08:23 by tony.li
请问现在传统的前端语言做后台开发,后端语言做前端开发,有什么好处

# re: Node.js Undocumented(1)  回复  更多评论   

2011-05-31 08:57 by dennis
@flyinweb
我也是,发现很多没看到过的api,最后只有去源码了,这个系列想做个总结和示例。

# re: Node.js Undocumented(1)  回复  更多评论   

2011-05-31 08:58 by dennis
@tony.li
node.js吸引人的地方在于用函数式的方式编写高性能的异步网络程序,门槛不高,并且开发效率和运行效率都不错。

# re: Node.js Undocumented(1)  回复  更多评论   

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

# re: Node.js Undocumented(1)  回复  更多评论   

2011-05-31 11:25 by flyinweb
@dennis
不过在将这些函数用于实际开发时需要权衡一下。
我从V0.2.2开始用(那个时候API文档中的函数更少),用了几个API中没有的函数,到了V0.3.1,改为Deprecated了,到了V0.3.7直接消失了。

# counterstrikegowallhack22685  回复  更多评论   

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.

只有注册用户登录后才能发表评论。


网站导航: