简介
Node的目标是提供一个简单的构建网络程序的方法。在下面的"helloworld"例子中,很多客户端连接可以被并行地处理。Node告诉操作系统(通过epoll, kqueue, /dev/poll,或select)在新连接创建时通知它,然后它进入睡眠状态。如果有新的连接,它就会执行回调函数。每个连接仅仅是一个很小的堆申请。
Node的处理模型和现在常用的使用操作系统线程的并发模型不同。基于线程的网络相对效率低并且难以使用。与传统线程模型对每个新连接都要申请2M的线程堆栈相比,Node在高负载下表现出更好的内存效率。而且,Node用户不必关心进程死锁,因为Node里根本没有锁的概念。Node几乎没有直接执行IO操作的函数,进程也就永不阻塞,因为没有阻塞,即使不是专家也能编写快速的系统。
Node在设计上受Ruby的EventMachine和Python的Twisted影响并且和它们有些像。Node更注重事件模型,它将事件循环作为语言结构而不是类库。在其它的系统中,一般会有一个阻塞的调用来开始事件循环,在脚本的开始使用回调函数定义一个行为,然后在最后通过调用阻塞的调用(例如EventMachine::run())来启动服务。Node没有这样的启动事件循环的函数调用,它执行完输入脚本后自动进入事件循环,这有点像浏览器的JavaScript,事件循环对用户隐藏了。
windows下安装使用
1.安装
在http://node-js.prcn.co.cc/ 下载最新的“complete”包,解压到任意文件夹,例如:c:/node,该部分为使用二进制包方式(较为简单),可直接使用,手动安装方式请参考:
http://blog.csdn.net/sdhustyh/article/details/6583250
2.示例脚本准备
编写以下脚本:
var http =require('http');
http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type':'text/plain'});
res.end('Hello World\n');
}).listen(1337,"127.0.0.1");
console.log('Serverrunning at http://127.0.0.1:1337/');
保存该内容至example.js放在c:/node/bin目录下
3.运行
使用命令行导航到c:/node/bin,使用以下命令启动服务
node example.js
可以看到如下提示:Serverrunning at http://127.0.0.1:1337/, 代表服务已启动。
4.访问http://127.0.0.1:1337/可看到“hello world”
总结
Node是一个服务器端JavaScript解释器,它将改变服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物理机的连接代码。
Node非常适合以下情况:您预计可能有很高的流量,而在响应客户端之前服务器端逻辑和处理所需不一定是巨大的
Node不适合在以下场合使用:1.动态创建的网页,2.关系型数据库频繁操作应用。
注:本文整理自node.js官方网站翻译以及一些专家的文章。