Node -- 使用场景及优缺点

听说了好久的node.js,今天查看了很多博文,终于对node.js有了一定的了解。
一、node的特点
1>事件驱动
2>非阻塞I/O
3>轻量、快,适合实时数据交互应用
4>单进程、单线程
二、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阻塞(即主线程不会停止接收请求,主线程处理业务)。

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

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

五、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爬虫

转载于:https://my.oschina.net/u/2312022/blog/708209

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值