NodeJs简介

来源:互联网 发布:淘宝服务中心 编辑:程序博客网 时间:2024/05/23 15:36

NodeJs

NodeJS是什么

以下是官方的描述:

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。

为什么需要NodeJs

当前的服务器处理请求的方式有什么问题?
在Tomcat之类web容器中,对于每个连接都需要一个线程,当有新的http请求进来后,web容器便则会从线程池中获得一个线程来处理该请求(每个线程上下文大约占用 2 MB 的内存。在一个拥有 4 GB RAM 的jvm中,理论上最大的并发连接数量是 2,000个用户,当然,Tomcat容器也可以选择NIO方式来提高并发)。

Node对此进行了进一步的优化,对于每个连接,在 Node 引擎的进程中生成一个事件,而非分配一个线程或者采用多路复用。通过这种方式,nodeJs可以极大地降低内存资源的使用,实现其宣称的“能支持数万个并发连接”的目标。

NodeJs的特性

  • 高性能
    NodeJs基于V8引擎,使用了一些最新的编译技术,使得用Javascript的代码运行速度获得了极大提升,在提升性能的同时,nodeJS还能能减低开发复杂度。
  • 非阻塞
    Node采用一系列“非阻塞”库来支持事件循环的方式。本质上就是为文件系统、数据库之类的资源提供接口。向文件系统发送一个请求时,无需等待IO,IO准备好的时候非阻塞接口会通知Node。
  • 可运行于服务器端
    虽然还存在其他一些支持Javascript在服务器端 运行的平台,Node发展迅猛,已成为事实上的平台。
  • 单线程
    Node.js可以在单线程的情况下实现对任务进行并行处理,它通过事件轮询(event loop)来实现并行操作。
  • 丰富的类库
    每一个Node.js的类库都包含了十分丰富的各类函数,比如http模块就包含了和http功能相关的很多函数,可以帮助开发者很容易地对比如http,tcp/udp等进行操作,还可以很容易的创建http和tcp/udp的服务器。

应用场景

由于nodeJs非阻塞高性能等特性,非常适合于大型高流量网站,此外,还可以使用它来开发一些快速移动Web框架。除了Web应用外,NodeJS也被应用应用程序监控、媒体流、远程控制、桌面和移动应用等等。

  • RESTful API
    对于不需要服务端复杂处理的请求,如:仅用于接收几个参数,解析它们,简单查询数据库,根据结果组合一个具有少量文本信息的响应返回给用户。

  • 前后端分离
    在非SPA方式的开发模式下,前端负责View和Controller层,后端负责Model层。由于前端人员更熟悉js而非Java,因此更便于View与Controller在前端的交互。

  • 队列
    对于高并发写的场景,每秒有数千条或更多写数据库的请求,并且这些请求远大于数据库能够支撑的tps.对于这种情况,Node 将它们写入一个内存排队机制(如redis),另一个单独进程可以从那里将它们写入数据库。
    (这一点与使用Java来处理基本类似,大多数情况下,从前后端分离的角度来看,更适合在后端使用Java来实现)

NodeJs的helloWorld

以下是一个nodejs的Hello World :

var http = require('http');server = http.createServer(function (req, res) {res.writeHeader(200, {"Content-Type": "text/plain"});res.end("Hello World\n");});server.listen(8000);console.log("httpd start @8000");

与jquery的区别

jquery是一个运行在客户端的javascript库,主要提供操作DOM等等的简化操作
node.js是运行在服务器端的程序,用来解释和执行js语言, 它不仅提供js类库,更是一个高性能的js处理平台,其侧重点在于提高并发处理能力。

与Netty等网络框架的区别

对于线程池方式来处理请求的方式,它依然可能发生阻塞。原因在于,线程池的线程数量通常有限制的,如果所有线程都被阻塞(例如网速慢,或者被人恶意占用连接),那么未分配线程的请求将会排队等待,从而发生阻塞。
Netty等网络框架采用多路复用方式,只需要一个线程或者少量线程,就可以处理大量请求。从本质上来说,Node的原理与其有相似的地方,其不同之处在于,Node比Netty更进一步,抛弃了多线程的处理方式,而完全采用事件处理的方式。

参考资料

http://www.ibm.com/developerworks/cn/opensource/os-nodejs/

0 0
原创粉丝点击