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 重新安装即可。