nodejs点滴

1、推荐一本很不错的介绍书,很短,但是可以一窥nodejs写http服务器的方式

  http://www.nodebeginner.org/index-zh-cn.html

2、cluster实现模式

  由于node是单进程单线程的方式运行,因此若想发挥多核的优势需要使用进程组的方式进行。

  node之中提供了cluster模块用于实现多进程之间的通讯,进程分成一个主进程与多个从进程。

  对于HTTP服务器,通过child_process.fork进行创建工作进程,因此可以在主从进程之间进行通讯。

  当在从进程调用server.listen时,会将listen的参数序列化后传递给主进程,主进程判断在该端口是否已经有监听的服务,若服务已经存在则直接返回该sockid,否则创建一个返回sockid。

  当有一个客户端连接上来时,会有多个进程调用accept此时有操作系统进行负载均衡,决定由哪个进程最终得到该客户端请求的连接。

  另外需要注意,cluster模块没有任何其他管理进程的功能,因此对进程的管理需要由应用自行处理。

3、去哪里找当前node支持的模块

  通过github上搜索node,查找到joyent-node那个项目,查看其wiki连接,找到Modules部分,那里有列表。

  https://github.com/joyent/node/wiki/Modules

4、关于模块信息

  实现require目录的三种情况:1)创建package.json文件,然后在该文件中定义一个main,如下:  

{ "name" : "some-library",
  "main" : "./lib/some-library.js" }

  2)当目录下没有package.json文件时,将试着加载index.js, index.node 文件。

  关于exports对象,该对象默认由Modules System创建,但是可以修改。只要直接将该对象重新赋值即可。如:  

module.exports = new EventEmitter();

5、实现模块的动态加载

  在nodejs之中require加载的模块会进行缓存,也就是调用两次require同样的文件,只会加载一次。

  而为了实现动态加载,需要require去加载文件而不是使用缓存,为了实现该方法,需要将缓存删除后再加载即可。

  delete require.cache[require.resolve("./deal")];
  var deal = require("./deal");

  参考网址:http://stackoverflow.com/questions/9210542/node-js-require-cache-possible-to-invalidate

  http://stackoverflow.com/questions/1972242/auto-reload-of-files-in-node-js  

 6、node-gyp找不到v8.h的异常

  可能原因是在node-gyp目录中没有deps目录:找到 ~/.node-gyp/0.10.4 目录,查看目录下是否存在deps,src目录,若没有则可能是由于安装多个的node

导致,~/.node-gyp/0.10.4 中的 0.10.4 表示当前node的版本。

  解决方法:删除这个目录,然后使用 npm install node-gyp 重新安装即可。

posted @ 2013-02-26 17:45  chang290  阅读(301)  评论(0编辑  收藏  举报