1.Node.js 简介及特点:
Node.js 是一个可以让 JavaScript 运行在服务器端的平台,它可以让JavaScript 脱离浏览器的束缚运行在一般的服务器环境下,就像运行 Python、 Perl、 PHP、 Ruby 程序一样。我们可以用 Node.js 轻松地进行服务器端应用开发,Python、 Perl、 PHP、 Ruby 能做的事 Node.js 几乎都能做,而且可以做得更好。
Node.js 最大的特点就是采用异步式 I/O 与事件驱动的架构设计。对于高并发的解决方案,传统的架构是多线程模型,也就是为每个业务逻辑提供一个系统线程,通过系统线程切换来弥补同步式 I/O 调用时的时间开销。Node.js 使用的是单线程模型,对于所有 I/O 都采用异步式的请求方式,避免了频繁的上下文切换。Node.js 在执行的过程中会维护一个事件队列,程序在执行时进入事件循环等待下一个事件到来,每个异步式 I/O 请求完成后会被推送到事件队列,等待程序进程进行处理。
这样做的好处是,CPU和内存在同一时间集中处理一件事,同时尽可能让耗时的 I/O 操作并行执行。对于低速连接攻击,Node.js 只是在事件队列中增加请求,等待操作系统的回应,因而不会有任何多线程开销,很大程度上可以提高 Web 应用的健壮性,防止恶意攻击。当然,异步模式的弊端也是显而易见的,因为它不符合开发者的常规线性思路,往往需要把一个完整的逻辑拆分成一个个事件,增加了开发和调试的难度(Node.js 的第三方模块提出了很多解决方案)。
Node.js 用异步式 I/O 和事件驱动代替多线程,带来了可观的性能提升。Node.js 除了使用 V8 作为 JavaScript 引擎以外,还使用了高效的 libev 和 libeio 库支持事件驱动和异步式 I/O。
2.Node.js 安装和配置:
Node.js 可以安装在遵循 POSIX 标准的操作系统上,如 GNU/Linux、 Mac OS X、 Solaris等,也可以安装在 Windows 上。尽管 Windows Azure 宣布对 Node.js 完全支持,但 Node.js 与 Windows 的兼容性仍然不如 POSIX 操作系统,在 npm 提供的第三方模块中体现的尤为突出。不建议在 Windows 上进行 Node.js 的开发和部署。下面介绍一下如何在 32 位的 CentOS 6.6 上安装 Node.js :
[root@localhost ~]# cd /usr/local/src/ [root@localhost src]# wget http://nodejs.org/dist/v0.12.2/node-v0.12.2-linux-x86.tar.gz [root@localhost src]# tar -zxf node-v0.12.2-linux-x86.tar.gz
由于我们下载的是免编译的安装包,所以解压后即可使用。将解压后的目录移动到任意目录,配置环境变量:
[root@localhost src]# mv node-v0.12.2-linux-x86 /opt/node [root@localhost src]# vim /etc/profile exportPATH=$PATH:/opt/node/bin [root@localhostsrc]# source !$
至此, Node.js已经安装完毕。测试 Node.js 是否已经生效:
[root@localhost ~]# vim test.js function hello(){ console.log(“Hello World”); } hello(); [root@localhost ~]# node test.js Hello World
出现上述结果表明,Node.js已经可以使用。
Node.js 还有很多第三方模块,通过这些第三方包可以极大的方便开发(如 Express 模块,是一个很稳定且使用很广泛的 Web 开发框架)。使用 npm 命令可以安装第三方模块,npm 类似 Ubuntu 下的 apt-get ,CentOS 下的 yum :
[root@localhost ~]# npm install -g express
由于 npm 默认是从国外源获取和下载包信息,通常来说下载速度会非常慢,可以使用其 --registry 参数自定义源:
[root@localhost ~]# npm install -g express --registry=http://registry.npm.taobao.org/
其他版本安装包可以到Node.js 官网下载,地址如下:
3.Node.js 初步了解:
刚刚我们已经介绍了一种Hello World 的方式,除此之外,还有两种方式可以做到:
(1)-e 参数:类似 JavaScript 中的 eval() :
[root@localhost ~]# node -e ‘console.log(“Hello World”);’
Hello World
(2)进入 node 的 REPL(Read-eval-print loop)循环:
[root@localhost ~]# node >console.log(“HelloWorld”); Hello World undefined
这里的undefined 是 console.log 的返回值。如果输入一个错误的指令, REPL 会立即显示错误并输出调用栈。连续按两次 ctrl + c 或按一次 ctrl + d 即可退出 Node.js 的 REPL 模式。该模式在应用开发时会给人带来很大的便利,例如我们可以测试一个包能否正常使用,单独调用应用的某一个模块,执行简单的计算等。
如果仅仅是 HelloWorld 未免显得太 low ,现在我们尝试使用Node.js 建立 HTTP 服务器。Node.js将 HTTP 服务器剥离,直接面向浏览器用户。
[root@localhost~]# vim app.js //app.js var http =require('http'); http.createServer(function(req,res) { res.writeHead(200,{'Content-Type': 'text/html'}); res.write('<h1>Node.js</h1>'); res.end('<p>HelloWorld</p>'); }).listen(3000); console.log("HTTPserver is listening at port 3000."); [root@localhost~]# node app.js
之后即可通过 http://yourhostip:3000 来访问端口号为 3000 的服务器了。这个程序调用了 Node.js 提供的 http 模块,对所有 HTTP 请求答复同样的内容并监听 3000 端口。
这里我们先对Node.js 做一个初步了解,更多内容以后慢慢展开,就酱先~
参考资料:
《Node.js 开发指南》 作者:BYVoid