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的子进程(child_process)调用系统命令的方法分享
Jun 05 NodeJs
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
Jan 01 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
详解nodejs微信公众号开发——2.自动回复
Apr 10 NodeJs
nodejs密码加密中生成随机数的实例代码
Jul 17 NodeJs
nodejs动态创建二维码的方法
Aug 12 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
nodejs之koa2请求示例(GET,POST)
Aug 07 NodeJs
nodejs基础之常用工具模块util用法分析
Dec 26 NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
Feb 28 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 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将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
php小偷相关截取函数备忘
2010/11/28 PHP
需要注意的几个PHP漏洞小结
2012/02/05 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
jquery制作LED 时钟特效
2015/02/01 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
2019/04/26 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
在VUE中实现文件下载并判断状态的方法
2019/11/08 Javascript
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
Python文件去除注释的方法
2015/05/25 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
python实现的自动发送消息功能详解
2019/08/15 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
大学生应聘导游自荐信
2014/06/02 职场文书
职工年度考核评语
2014/12/31 职场文书
工程合作意向书范本
2015/05/09 职场文书
2015年库房管理工作总结
2015/10/14 职场文书