NodeJs的优势和适合开发的程序


Posted in NodeJs onAugust 14, 2016

很多同学可能都听说过nodejs,并且知道他是可以运行在服务器上的javascript,但是他的使用场景可能大家并不是很清楚,最近也在看学习nodejs,就做了一下小总结;

NodeJs的优势:

现在的很多的服务器端的语言(PHP,JAVA,ASP.net),有什么问题呢,现在的服务器端的语言在用户访问服务器时,为每个用户链接创建了一个线程,但每个线程大约要耗费2M的内存,如果一个8G内存的服务器,也就能链接4000个左右的用户,如果用户的链接数较大,就必须增加服务器的数量,而且现在用户的链接方式有很多(如app,网页同时访问),这就又涉及到服务器共享的问题,所以服务器怎么支持最大的同时链接用户量就成了一个问题;

NodeJS修改了客户端到服务器端的链接方法,解决了这个问题,他不在为每个客户端创建一个新的线程,而是为每个客户端链接出发一个NodeJs内部进行处理的事件,所以NodeJS具备同时处理多达几万个用户的客户端链接的能力;

NodeJS适合开发的应用程序:

当应用程序需要处理大量并发的输入/输出,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,我们应该考虑使用NodeJs来进行应用程序的开发,例如:

1、聊天服务器:如果聊天的人很多,用户的与服务器之间的并发链接量很大,但是服务器端的数据处理并不复杂;

2、综合类服务网站和电子商务网站的服务器:在这类网站中的服务器端,往往可能每秒存内可以接受多达上千条的数据并且需要将这些数据写入数据库中,NodeJs可以通过其队列机制将这些数据迅速写入缓存区中,然后再通过每一个单独的处理从缓存区中取出这些数据并将其写入数据库中,如果是其他的服务器(如Apache服务器或Tomcat服务器)的话,由于这些服务器采用的是阻塞型I/O机制,因此每条数据写入到数据库中都要等待一段时间(等上一条写完,才能写下一条),但是NodeJs使用的是非阻塞的I/O机制,因此可以实现这些数据到数据库中的写入,而不必再为每条数据的写入而等待一段时间;

总结:

一个规模稍微大点的系统都不是一种开发语言可以搞定的,往往是几种混杂一起,比如c、c++做服务器端开发,java做业务逻辑,php等做前端展示,此外还需要消息中间件等等。

nodejs可以很快地在服务器端做原型(原来只有c系和java等能做的事情,性能还很高),而且代码量相对会少很多;另一点是它的语法优势,js闭包等。但它不太适合做cpu密集型处理的工作,只能绕着弯去解决,据说这次QCon会有人分享这方面的研究成果,可以关注下。

每种语言都有它适合的领域,没必要强求一门语言可以解决所有事情,拥有其它语言的特性,只有不断的tradeoff把系统做出来才是目标。

这些都是丛书上看到总结的,还望指正

NodeJs 相关文章推荐
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
Jan 01 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
nodejs搭建本地http服务器教程
Mar 13 NodeJs
NodeJs安装npm包一直失败的解决方法
Apr 28 NodeJs
NodeJs的fs读写删除移动监听
Apr 28 NodeJs
让nodeJS支持ES6的词法----babel的安装和使用方法
Jul 31 NodeJs
详解NODEJS基于FFMPEG视频推流测试
Nov 17 NodeJs
nodeJs实现基于连接池连接mysql的方法示例
Feb 10 NodeJs
详解redis在nodejs中的应用
May 02 NodeJs
NodeJS实现自定义流的方法
Aug 01 NodeJs
nodejs实现百度舆情接口应用示例
Feb 07 NodeJs
nodejs中使用worker_threads来创建新的线程的方法
Jan 22 NodeJs
在windows上用nodejs搭建静态文件服务器的简单方法
Aug 11 #NodeJs
Nodejs抓取html页面内容(推荐)
Aug 11 #NodeJs
用nodejs的实现原理和搭建服务器(动态)
Aug 10 #NodeJs
nodejs如何获取时间戳与时间差
Aug 03 #NodeJs
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
Jul 26 #NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 #NodeJs
nodejs加密Crypto的实例代码
Jul 07 #NodeJs
You might like
php小技巧之过滤ascii控制字符
2014/05/14 PHP
php筛选不存在的图片资源
2015/04/28 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
语义化 H1 标签
2008/01/14 Javascript
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
2014/05/12 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
Node.js 8 中的重要新特性
2017/06/28 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
Python Requests安装与简单运用
2016/04/07 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
python 自动批量打开网页的示例
2019/02/21 Python
python提取xml里面的链接源码详解
2019/10/15 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
基于python+selenium自动健康打卡的实现代码
2021/01/13 Python
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
如何进行Linux分区优化
2016/09/13 面试题
员工工作表扬信范文
2014/01/13 职场文书
大学活动总结范文
2014/04/29 职场文书
投资建议书模板
2014/05/12 职场文书
一文弄懂MySQL索引创建原则
2022/02/28 MySQL
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript