设为首页 收藏本站
查看: 677|回复: 0

[经验分享] nodejs浅探

[复制链接]

尚未签到

发表于 2017-2-21 08:31:58 | 显示全部楼层 |阅读模式
NoteJS简介
NodeJS是一个使用了Google高性能V8引擎的服务器端JavaScript实现。它提供了一个(几乎)完全非阻塞I/O栈,与JavaScript提供的闭包和匿名函数相结合,使之成为编写高吞吐量网络服务程序的优秀平台。

NoteJS特性
1.单线程
这说明它只能用一个CPU,在多核CPU上没有优势;不过可以通过以下方式实现多核CPU的利用:
a)使用软件负载均衡:为每个处理器单独启动一个NodeJS进程,每个进程都运行HTTP服务并绑定到不同的端口。这样需要一个负载均衡软件,将客户端请求转发到各进程,这个软件知道每个服务进程的端口。
b)使用操作系统内核做负载均衡:在node-v0.1.98中 ,雅虎贡献了一个用于传递和重用文件描述符的核心补丁,允许如Connect和multi-node等HTTP框架使用多个进程同时提供HTTP服务,而且不需要修改原有的程序代码和配置。
c)使用NodeJS转发请求:需要node-v0.1.100或更高版本以及node-webworker。可以认为Web Worker是一个独立的执行上下文(类似进程),它可以由JavaScript代码生成并来回传递数据。
2.非阻塞IO
nodejs通过libev事件得到IO执行状态,而不是轮询,提高了CPU利用率。
虽然nodejs是单线程的,但它的IO操作是多线程的,多个IO请求会创建多个libeio线程(最多4个),使通常情况的IO操作性能得到提高。
但是当IO操作情况比较复杂的时候,有可能造成线程竞争状态,导致IO性能降低;而且libeio最多创建4个线程,当同时有大量IO请求时,实际性能有 待测量。另外,由于每个IO请求对应一个libeio的数据结构,当同时有大量IO操作驻留在系统中时候,会增加内存开销。
Libeio为了实现异步IO功能,带来了额外的管理,当IO数据量比较小的时候,整体性能不一定比同步IO好。
3.Google V8
C++编写,解释JS更快,性能更好。
测试结果表明,nodeJS性能远超php\python\ruby。
4.事件驱动
传统的web server多为基于线程模型。你启动Apache或者什么server,它开始等待接受连接。当收到一个连接,server保持连接连通直到页面或者什么事务请求完成。如果他需要花几微妙时间去读取磁盘或者访问数据库,web server就阻塞了IO操作(这也被称之为阻塞式IO).想提高这样的web server的性能就只有启动更多的server实例。
相反的,NodeJS使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式IO或者事件驱动IO)


运行NodeJS
nodeJS可以运行在各个平台上:windows\mac\linux。安装方法也是下载双击便可安装,无需配置,一步到位。
以下是hello world例子:
1.编写hello_world.js
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');
2.运行:node hello_world.js
Server running at http://127.0.0.1:1337/
3.访问:http://127.0.0.1:1337/

像apache一样,nodeJS是模块化的,可以通过安装npm来安装任何模块:
$ npm install MODULE
然后通过:require(‘MODULE’)引进你想要的任何模块。社区相当丰富,模块也相当多,基本上能找到你想要的任何模块:web framework/database/templating/css engines/build and deployment/smtp/rpc/tcp\ip等等。

比较出色的web框架有express,国人更是在此基础上开发出性能更高的rrestjs web框架,性能堪比nginx!express再配合出色的jade view engine,就可以实现复杂的MVC开发模式。
NodeJS带来的改变
对于前端开发者,有了一个非常好的机会切入后端开发或者尝试后端开发,而无需重新学习一门新的语言和语法。前端开发者学习一些基本的服务器端知识,无需依赖额外的资源,就可以靠自己快速开发出一个功能完整的原型,这是以前无法想象的。
对于后端开发者,NodeJS提供一种全新的开发思路和性能更好的动态语言。作为追求性能的后端开发者,在动态语言选择中,NodeJS是非常有性能优势的。前后端代码复用不再是幻想。例如,表单输入有效性判断的业务逻辑代码可以很有地复用。更重要的是让前后端开发者的思维相互交叉渗透,会萌发出更多创新火花。


NodeJS现况与应用场景
目前NodeJS主要还是应用在一些中小型的Web项目,以及特定的开发平台中,更多的还是一些应用逻辑层面的开发,对于NodeJS自身性能和功能的挖掘还停留在一个比较浅的层次上。
目前国内大中型的系统中实际应用NodeJS作为线上业务系统还不多见。淘宝内目前有一些大中型项目已经在线运行,如NodeFox(分布式Mysql查询与管理服务)、Itier(异构数据源的中间层数据服务)、淘宝指数。
然而,微软、雅虎、LinkedIn、eBay都在使用,并且拥有目前最火爆的开源社区,以及最频繁更新和贡献的第三方模块支持,这是一个高速飞奔的生态系统。
由于NodeJS天生的异步非阻塞,单线程特色,对于大量的io依赖性应用,如中间层、应用服务器、代理服务等是非常适合的场景。由于NodeJS技术社区很给力,提供了大量的功能模块,对于快速开发中小型的Web项目很合适


NodeJS开发注意
1.注意思维方式的转换,不要用串行系统的思路进行NodeJS系统的设计。
2.注意ECMA Script 5的新特性对于代码和程序运行效率的影响。
3.单线程模式中的资源共享给系统设计带来变化。
4.异步模式下的异常处理。


NodeJS相关资源网站
官网:http://www.nodejs.org
nodeJS模块:https://github.com/joyent/node/wiki/modules
国内社区:http://cnodejs.org/
Express官网:http://expressjs.com/guide.html
Jade官网:http://jade-lang.com/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-344965-1-1.html 上篇帖子: nodejs jsdom安装 下篇帖子: 初次安装nodejs
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表