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毫秒为间隔不断重复下去。

    ps.这篇blog刚好是我的第499篇blog,不出意外,第500篇还是继续介绍node.js。

文章转自庄周梦蝶  ,原文发布时间2011-05-31

时间: 2024-09-26 18:41:21

Node.js Undocumented(1)的相关文章

Node.js Undocumented(2)

  Node.js Undocumented(1)     Node.js Undocumented(2)     写这种系列blog,是为了监督自己,不然我估计我不会有动力写完.这一节,我将介绍下Buffer这个module.js本身对文本友好,但是处理二进制数据就不是特别方便,因此node.js提供了Buffer模块来帮助你处理二进制数据,毕竟node.js的定位在网络服务端,不能只对文本协议友好.     Buffer模块本身其实没有多少未公开的方法,重要的方法都在文档里提到了,有两个方法

将Node.js项目docker容器化并纳入kubernetes调度编排的实践

  简述 此文档以XXXLogApi-nj项目为例,讲解了将基于Node.js+Express开发的javascript项目容器化的过程.希望以后类似的项目可以以此为参照进行扩展. XXXLogApi-nj本身是一个微服务化的项目,其作用是为系统单纯的收集相关发布日志,以便能及时的展示给用户. ***这份文档的操作,开始于编码完成之后流程.不涉及GIT和JENKINS的等的操作. ***为保持职业操作,涉及公司信息的地方作了敏感化处理. ***在这个系列中,我同时作了spring boot, b

Node.js 服务端实践之 GraphQL 初探

0.问题来了 DT 时代,各种业务依赖强大的基础数据平台快速生长,如何高效地为各种业务提供数据支持,是所有人关心的问题. 现有的业务场景一般是这样的,业务方提出需求,然后寻找开发资源,由后端提供数据,让前端实现各种不同的业务视图.这样的做法存在很多的重复劳动,如果能够将其中通用的内容抽取出来提供给各个业务方反复使用,必然能够节省宝贵的开发时间和开发人力. 前端的解决方案是将视图组件化,各个业务线既可以是组件的使用者,也可以是组件的生产者.那么问题来了,前端通过组件实现了跨业务的复用,后端接口如何

聊天-ASP.net MVC的一个项目里可以使用Node.js做的应用吗?

问题描述 ASP.net MVC的一个项目里可以使用Node.js做的应用吗? 20C 是这样的,最近我们小组在做一个ASP.net MVC 的项目网页,里面有个即时网络聊天室的功能要实现,我看到用Node.js做好像很不错,但是就是不知道.net的项目可以使用吗?

Node.js selenium-webdriver

6.5. Node.js selenium-webdriver 6.5.1. 安装测试环境 6.5.1.1. Selenium Server 下载 Selenium Serverhttp://selenium-release.storage.googleapis.com/2.40/selenium-server-standalone-2.40.0.jar 启动 Selenium Server java -jar selenium-server-standalone-2.40.0.jar 6.5.

CentOS上安装Node.js和mongodb笔记

  CentOS上安装Node.js和mongodb笔记        这篇文章主要介绍了CentOS上安装Node.js和mongodb笔记,本文讲解了Python安装.Node.js安装.npm安装.mongodb驱动安装.mongodb数据库操作测试代码等内容,需要的朋友可以参考下 之前听说过Node.js,只是知道它可以应用于服务器端,但是对很多具体的东西并不了解.今天在QCon上听了袁锋的分享<Node.js脱离了浏览器的Javascript>之后,顿时有了想立刻试一下的冲动. No

node.js的multipart模块问题

问题描述 node.js的multipart模块问题 multipart模块已经安装好了,node.js代码中有一行var parser=new multipart.parser()为什么运行后该行代码会报错:multipart.parser is not a function 解决方案 Node.js工具模块Node.js 模块和包Node.js fs 模块 解决方案二: https://cnodejs.org/topic/4ffed8544764b729026b1da3

Node.js之异常处理

   记得刚刚开始学Node.js时自己尝试着写了一个简单的http服务器,跟以前接触过的php相比感觉更自由,编起码来也更爽了.但是某天发现稍微一个很小的错误就导致整个http进程挂掉了,顿时有种不靠谱的感觉啊,跟php比起来感觉Node.js容错能力确实弱了很多,起码一个php文件出错也不会导致所有的服务都挂掉.           后来接触到Node.js web开发框架后感觉也不是那么轻易就让整个进程都挂掉的,于是便想研究下Node.js究竟是如何来处理各种异常从而避免整个进程挂掉的.

ReactPHP,PHP版的Node.js

前言 前段时间csdn找我约稿.一直忙于项目,也没来及写.十一的时候,学习了下ReactPHP.把了解的一些东西整理成文.难免有疏漏,如发现请指正.原文已经发布到csdn.网址 http://www.csdn.net/article/2015-10-12/2825887 从名字说起 虽然ReactPHP项目已经发展了有4年之久,但是对于其称呼显得有点混乱.在开源中国为其建立的项目主页上,其被命名为React,或者node.PHP.国外的一些的博客谈及这个项目时,多数使用的是ReactPHP.到底