Nodejs简介


是什么

Nodejs是一个为实时web应用开发而诞生的平台,它从诞生之初就考虑了在实时响应,超大规模数据要求下架构的可扩展性。它摒弃了传统平台依靠多线程来实现高并发,采用了单线程、异步式io、事件驱动式的程序设计模型(听起来是不是感觉很高大上😂)

异步式io和事件驱动

Nodejs最大的特定就是采用了异步式io和事件驱动的架构设计。他使用了单线程模型,对于所有的io都采用异步请求,避免了频繁的上下文切换,避免浪费大量内存资源,也可以避免遭受低速连接攻击。
例如,对于传统的数据查询:

res = db.query('select * from table');
res.output();

以上代码之行到第一行时候线程会阻塞,等待数据库查询完成后才会返回。
而nodejs采用下面方法来解决这个问题:

db.query('select * from table', function(res){res.output();});

进程在执行到 db.query的时候,不会等待结果返回,而是直接继续执行后面的语句,直到进入事件循环。 当数据库查询结果返回时,会将事件发送到事件队列,等到线程进入事件循环以后,才会调 用之前的回调函数继续执行后面的逻辑

nodejs的性能

nodejs使用异步io和事件驱动代替多线程,带来了可观的性能提升,nodejs除了使用V8作为javascript引擎以外,还使用了高效的libev和libeio库支持事件驱动和异步式io。nodejs开发者在libev和libeio的基础上抽象出了libuv。对于POISX系统(LINUX,UNIX,MAC OS X)libuv通过封装libev和libeio来利用epoll和kqueue。而在windows下,libuv使用了windows的IOCP机制。

做什么

nodejs由于采用了事件和异步io机制,所以很适合那些高并发的io密集型的应用。

  • RESTful API: nodejs采用事件和异步io机制,可以处理大量客户端连接,本身没有复杂业务逻辑,本质都是查询数据库获取数据来组装响应给客户端。
  • 统一WEB应用的UI层: 目前的mvc架构,在某种意义上说,有2个ui层,一个是在浏览器我们最终看到的,另一个是我们在server端,负责生成和拼接页面。先不说这种架构好坏与否,如果我们引入nodejs。这样后端人员可以最小粒度的开发各种RESTful 接口,前端人员通过nodejs来调用这些api,后端人员只需提供api,不需要关心数据如何从一个页面传递到另一个页面,也不需要关心用户数据更新是通过ajax还是刷新页面。这样就真正实现了前后端的分离。
  • Web Socket 服务器: 传统的B/S架构都是客户端发起请求,服务端响应这种单方向的架构。我们可以用nodejs+socket.io来实现Web领域的实时推送,也被称作Realtime技术。这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新。它有着广泛的应用场景,比如在线聊天室、在线客服系统、评论系统、WebIM等。

文章作者: 叶明
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 叶明 !
评论
 上一篇
spring-cloud-eureka源码分析一(client端) spring-cloud-eureka源码分析一(client端)
what is eureka先介绍下eureka是什么玩意。eureka是netflix公司开源的一款基于REST的服务自动注册和发现的产品,并且提供了java客户端给eureka client端更好的与eureka server交互。另外
2016-12-01
下一篇 
贵州游记 贵州游记
6月7号中午12点就请了一天半的假,直接从公司出发去浦东机场,6月11号回到上海。总共4天半的时间,这次贵州之行,给我最大的印象就是贵州的山真是多,雨也很多,空气很好。另外本次贵州之行,也是我第一次在外面住青旅,在青旅结识了不少喜欢旅游的朋
2016-06-12
  目录