Node -- 使用场景及优缺点

据说了很久的node.js,今天查看了不少博文,终于对node.js有了必定的了解。
1、node的特色
1>事件驱动
2>非阻塞I/O
3>轻量、快,适合实时数据交互应用
4>单进程、单线程
2、node带来原有系统瓶颈的解决方法
1>并发链接
举个简单的例子,不少人在银行排队办理业务
1.1 单线程模式
银行只有一个窗口工做,即服务端只有一个线程,那么每次只能有一个用户办理业务,其他的都要等待,这就是阻塞,正在享受服务的请求阻塞后面的请求了。
1.2 多线程模式
和明显,银行经理发现办理业务的人比较多,他会立刻多开几个窗口,即服务器端调节线程数量来知足多并发请求。这种方式与第一种比起来,效率很明显提升了不少,但依然存在问题,如来来100个用户办理业务,但窗口只开了2个,每次只能办理2我的,不少人依然须要等待;另一个问题就是 银行新开窗口须要增长很大的成本:工做人员、窗口地方、处理业务所需的工具(计算机/柜台)等。由于银行并不知道每次会来多少人办理业务,若是固定的多开窗口,也是一种浪费。
1.3 node模式(异步、事件驱动模式)
一样是用户办理业务,一样只有一个柜台,可是与前面的处理方式不同,用户事先将须要处理的业务准备好(好比:取钱/存钱/贷款等),而后到柜台提交材料就行,柜台会返给每一个用户一个号码,等银行处理完了,打电话通知用户过来拿结果。这样,效率就高多了,全部的用户只须要过来递交材料和拿号码就行。银行处理完了后,打电话或经过人工喊(node.js中叫回调)用户过来拿结果,接着用户处理本身的事情(好比回家等)。
2>I/O阻塞
node.js解决了刚刚用户排队等待的问题,它的内部处理机制呢?以下
柜台的工做
1)接收用户提交的材料
2)发号给用户
3)通知用户取结果
4)将材料分发给银行内部工做人员(这是重点,这里才是处理业务的部分)
分析:柜台就是node.js的主线程,只要来了I/O事件(用户请求提交材料),它就会建立子线程去处理业务(分发材料给银行内部工做人员处理),可是主线程依然继续执行(接着等待/处理下一位用户)。这就不会致使I/O阻塞(即主线程不会中止接收请求,主线程处理业务)。html

3、node.js优缺点
优势
1>高并发(即非阻塞)
2>适合处理I/O密集型应用(即处理请求频繁的应用)
缺点
1>不适合CPU密集型应用,即不适合处理运算量很大的状况,因为JS单线程的缘由,若是长时间处理计算,会致使时间片不能释放,则后续I/O没法发起。 解决方案:将大型运算分解成多个小任务,使得CUP时间片适时释放,不阻塞下一个I/O调用。
2>只支持单核CPU,不能充分利用CPU
解决方案:使用Nginx反向代理,作负载均衡。前端

4、node.js适合场景
1>restful api
这是node最理想的应用场景,它能够处理数万条请求链接。它不须要作太复杂的处理,只须要将从数据库中取出的结果拼接成规定的格式返回给前端便可。
2>拼接UI界面
这是目前使用node最多的地方,因为混合app的崛起,后台负责处理复杂的业务逻辑,而后传送给node这层,node作拼接,而后直接返回给前端,前端拿着这些数据直接显示便可。
3>大量ajax请求的引用
不用解释,这是node的特长。java

5、node应用场景
1>web开发:Express+ejs+Mongoose/mysql
express是node.js web应用框架
ejs是嵌入到js的模板,经过编译生成html代码
mongoose是mongodb对象模型工具,经过它能够访问MongoDb数据库 mysql就不用说了
一般node作web开发,就须要上述3个框架配合使用,就好像java中的ssm框架整合。
2>rest开发:Restify
restify是一个基于node的rest应用框架,支持客户端与服务端。
3>web聊天室
4>web爬虫node

相关文章
相关标签/搜索