
Node.js是一个基于ChromeV8引擎的Javascript运行环境。Node.js使用了一个事件驱动、非阻塞式IO的模型,使其轻量又高效。Node.js的包管理器npm,是全球最大的开源库生态系统。简单来说Node是js的一个虚拟机(平台),能够解析js代码,使其运行在各个平台,这有点类似java的jvm。同时Node平台内部提供了大量的工具库,使js能与操作系统进行交互,例如读写文件。
2009年3月,Ryan Dahl在博客宣布创建
2009年5月,Ryan Dahl在GitHub中开源了最初版本,同年11月的JSConf就安排了Node讲座
2010年底,Ryan Dahl加入Joyent全职负责Node的发展
2011年7月,在微软的支持下登陆Windows平台
2012年1月底,Ryan Dahl将掌门人身份交给NPM的作者lssac Z.Schlueter
2013年7月,发布稳定版v0.10.13
随后,Node的发布计划主要集中在性能上面,由V0.14后正式发布了V1.0版本
异步I/O
单线程
事件与回调函数
跨平台

从上面这张图来看,NodeJS的结构分为3层:
Node standard Libarary(Node.js标准库),源码在lib目录下,是一个用javascript编写的库,里面包含了http,fs,events,buffer等Nodejs提供的核心模块,
javascript能够通过Api直接去调用这些模块,例如:let fs = require('fs')。
第二层的Node bindings是js与底层沟通的一座桥梁,使其能与底层相互沟通,bindings是一个又c++实现,源码在src/node.cc。
最后一层是node的最底层结构
V8: Google开源的高性能JavaScript引擎,以C++实现。这也是集成在Chrome中的JS引擎V8将你写的JavaScript
代码编译为机器码然后执行。
Libuv: 是一个用c语言实现的库,它为Nodejs提供的跨平台的操作,在其内部提供了事件循环(Event Loop),线程池,异步I/O等功能。
C-ares:提供了异步处理DNS相关的能力。
http_parser、OpenSSL、zlib 等:提供包括http解析、SSL安全协议、数据压缩等其他的能力。

这张图是把Node作为一个服务器来处理所有用户的接受和响应

这张图是把Node作为一个中间服务器来用,主要是进行分发等工作,具体步骤是Node来接受客户端传来的信息,然后把事件交托给传统java等服务器来处理,处理完后返回给node服务器,然后响应给客户端
网友评论