如果说的简单一点,Node.js是个服务器,像Tomcat一样,接受Web请求,并在进行业务处理之后,将结果返回给前台,Node.js适用于高并发的请求,适用于IO较多,计算较少的业务,下面说说Node.js的特点并作解释。
—事件驱动
什么是事件驱动?网上很多在说这个很多,但都说的很迷惑,给人高大上的感觉,又摸不着头脑。其实,我认为事件驱动就是基于回调,举个例子,进程A运行到某处需要进行I/O操作,正常情况下进程A需要处理完I/O之后才能继续下面的操作,在事件驱动模型下,处理I/O的操作将会与后面的程序并行处理,I/O处理完成之后,结果将由事件处理函数(也就是回调函数)来处理,这样就减少了等待I/O的时间。
—主进程单线程
这其实是JavaScript语言的特点,所谓“单线程”就是指一次只能完成一件任务,如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。这样呢,结合Node.js是基于事件的,就有一个事件的队列,Node.js以此执行事件队列里的事件。使用单线程有什么好处呢?不妨先看看多线程有什么坏处:
1、多线程开销大。如果服务器是多线程的(Tomcat就是这样,没有一个新的请求,就会开启一个新的线程),那么每一个线程将会最少占用2M的系统内存,这样的话,如果请求非常多,服务器的压力将会非常大。
2、多线程容易出现错误。开发多线程的程序非常困难,容易出错,程序员需要考虑死锁,数据不一致等问题。
这样使用JavaScript的单线程就避免了上述问题,单线程是指主线程是单线程的,所有阻塞的部分交给一个线程池处理,主线程通过队列跟线程池协作。
—使用Google V8引擎
V8是一个用Google开发的开源JavaScript引擎,用于GoogleChrome,其实就是一个JavaScript解释器。V8用在Chrome浏览器中解释JavaScript代码,那么也可以用在服务器端解释代码,这就是Node.js使用JavaScript在服务器端的原因。
V8在运行之前将JavaScript编译成了机器码,而非字节码或是解释执行它,以此提升性能。
以上总结了Node.js的几个特点,总的来说基于事件,非阻塞,占用内存少等特点,适合处理高并发大数据量请求的请求。下面将简单介绍一下Node.js的使用。
—安装
首先下载Windows版的Node.js,下载完成之后可以直接安装,地址为:
https://nodejs.org/download/
下载完成之后程序会自动配置path,可以打开命令提示符窗口(dos窗口),输入“node”,如果没错出现错误,表示安装成功。
—第一个小程序helloworld
在dos窗口所在的目录,新建一个helloworld.js文件,输入:
console.log(“Hello World”);
保存该文件,通过下面语句(node命令)来执行:
node helloworld.js
正常的话,就会在dos窗口输出“Hello World”,这样我们就完成了第一个小例子,下面会说一个稍微复杂一点的。
—第二个小程序:处理请求
在当前目录建立server.js文件,写入如下代码:
<span style="font-size:14px;"> var http = require("http");
http.createServer(function(request,response) {
response.writeHead(200,{"Content-Type": "text/plain"});
response.write("HelloWorld");
response.end();
}).listen(8888);</span>
这样就完成了一个可以工作的HTTP服务器,是不是很简单?当然我们得让它运行起来,在dos窗口输入:
node server.js
结束