Node.js Undocumented(1)
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毫秒为间隔不断重复下去。
本文来源于"阿里中间件团队播客",原文发表时间" 2011-07-06"
相关文章
- 我眼中的各种编程语言
- 规避FB数据危机,详解银监会数据治理指引落地路线
- 作为程序员最应该投资的是这十件事
- 为什么要投资程序员的幸福?
- 一次面试引发的思考(中小型网站优化思考)
- 你需要每天写代码吗?
- 企业数据分析工作的任务、工具及挑战
- 关于GDPR,数据科学家和数据工程师需要知道些什么
- 为了理想,我放弃了一切!
- 解密京东热门产品背后的技术支持
- 一张京东618订单的奇妙之旅
- 2018微策略用户峰会上海召开 领略商业智能的细致入微
- 京东搜索下拉框产品个性化探索实践
- 地理信息双创总决赛落下帷幕,地信行业新生力量蓄势待发
- 最完美Web开发程序员必备的五大技巧
- 程序员每周编程80+小时 健康如何保证
- 大数据预测:未来很吸金的领域
- 开源框架knot.js正式发布了,为前端开发带来全新的开发方式--CBS
- 10年工作经验老程序员推荐的7个开发类工具
- 如何解决PHP里大量数据循环时内存耗尽的问题