Node学习 -- 入门简介

来源:互联网 发布:c语言主函数参数 编辑:程序博客网 时间:2024/06/05 20:13

Node的特点

1、异步I/O

例如,在Node中读取文件,与前端的Ajax调用方式非常类似:

var fs = require('fs');fs.readFile('/path', function (err, file) { c    onsole.log('读取文件完成')}); console.log('发起读取文件');

2、事件与回调函数

在JS中,函数是一等公民,回调函数无处不在。回调函数是Node中最好的接受异步调用返回数据的方式。

下面这个栗子,展示的是Ajax异步提交的服务器端处理过程。

var http = require('http');var querystring = require('querystring');//侦听服务器的request事件 http.createServer(function (req, res) {    var postData = '';     req.setEncoding('utf8');    //侦听请求的data事件     req.on('data', function (trunk) {        postData += trunk;     });    //侦听请求的end事件     req.on('end', function () {        res.end(postData);     });}).listen(8080);console.log('服务器启动完成');

3、单线程

Node保持了单线程的特点。单线程最大的好处是不用像多线程那样处处在意状态同步的问题,没有死锁问题,也没有线程上下文交换所带来的性能上的开销。

但是,单线程也有弱点:
1. 无法利用多核CPU
2. 错误会引起整个应用退出,因此应用的健壮性值得考验
3. 大量计算占用CPU导致无法继续调用异步I/O
积极面对这些弱点,可以避免潜在的问题,使其得以更高效的利用。

对于第三条的解决方案:
HTML5定制了Web Workers的标准,它能够创建工作线程来进行计算,以解决JS大计算阻塞UI渲染的问题。工作线程为了不阻塞住线程,通过消息传递的方式来传递运行结果,这也使得工作线程不能访问到主线程的UI。

Node使用了与WebWorkers相同的思路来解决单线程中大计算量的问题:child_process

子进程的出现,意味着Node可以从容的应对单线程在健壮性和无法利用多核CPU方面的问题。通过将计算分发到各个子进程,可以将大量的计算分解掉,然后再通过进程之间的消息来传递结果,这可以很好的保持应用模型的简单和低依赖。通过Master-Worker的管理方式,也可以很好的管理各个工作进程,以达到更高的健壮性。

4、跨平台

Node的应用场景

1、I/O密集
2、CPU密集
3、和遗留的系统和平共处
4、分布式应用