优秀的编程知识分享平台

网站首页 > 技术文章 正文

解决大规模 I/O 的利器Node.js(node.js最新)

nanyue 2024-10-13 03:54:08 技术文章 3 ℃

什么是Node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。

Node.js 的包管理器 npm,是全球最大的开源库生态系统。

注:V8是谷歌开发的,目前公认最快的 Javascript 解析引擎,libuv 是一个开源的、为 Node 定制而生的跨平台的异步I/O库。Node.js已被IBM、Microsoft、Yahoo、Walmart、Groupon、SAP、 LinkedIn、Rakuten、PayPal、Voxer和GoDaddy等企业采用。


Node.js 的特点

作为后端JavaScript的运行平台,Node保留了前端JavaScript中些熟悉的接口,没有改写语言本身的任何特性,依旧基于作用域和原型链,区别在于它将前端中广泛应用的思想作用到了服务器端。

1、它是一个Javascript运行环境

2、依赖于Chrome V8引擎进行代码解释

3、事件驱动

4、异步I/O

5、轻量、可伸缩,适于实时数据交互应用

6、单进程,单线程

7、跨平台


Node.js优点。采用事件驱动、异步编程,为网络服务而设计。其实Javascript的匿名函数和闭包特性非常适合事件驱动、异步编程。而且JavaScript也简单易学,很多前端设计人员可以很快上手做后端设计。Node.js非阻塞模式的IO处理给Node.js带来在相对低系统资源耗用下的高性能与出众的负载能力,非常适合用作依赖其它IO资源的中间层服务。Node.js轻量高效,可以认为是数据密集型分布式部署环境下的实时应用系统的完美解决方案。Node非常适合如下情况:在响应客户端之前,您预计可能有很高的流量,但所需的服务器端逻辑和处理不一定很多。

Node.js缺点。可靠性低,单进程,单线程,只支持单核CPU,不能充分的利用多核CPU服务器。一旦这个进程崩掉,那么整个web服务就崩掉了。


Node.js简史

Ryan Dahl

2009年由瑞安·达尔(Ryan Dahl)开发了Node.js

2009年11月Dahl在欧洲JSConf大会上展示了Node.js项目

2010年1月,一款名为“npm”的软件包管理系统诞生

2011年6月,微软和Joyent(达尔的公司)共同合作,把Node.js移植到了Windows系统上面

2012年1月,达尔离开了Node.js项目,开发工作由他的同事以及npm创始人艾萨克·施吕特(Isaac Schlueter)继续主持

2014年2月,蒂莫西·费里斯(Timothy J. Fontaine)接任项目主管

2015年初成立Node.js基金会。基金会得到了IBM、Intel、微软、Joyent等公司的支持

bat对中文Node.js的支持

npm包管理器

npm是Node.js附带的包管理器。npm是一个命令行工具,用于从NPM Registry中下载、安装Node.js程序,同时解决依赖问题。npm提高了开发的速度,因为它能够负责第三方Node.js程序的安装与管理。NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:

允许用户从NPM服务器下载别人编写的第三方包到本地使用。

允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。

允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

Node.js示例

用Node.js撰写的HTTP Server版hello world示例:

var http = require('http');

http.createServer(function (request, response) {

response.writeHead(200, {'Content-Type': 'text/plain'});

response.end('Hello World\n');

}).listen(8000);

console.log('Server running at http://127.0.0.1:8000/');

另一个简单的TCP服务器示例,监听(Listening)端口7000并输出 (echo)之前输入的消息:

var net = require('net');

net.createServer(function (stream) {

stream.write('hello\r\n');

stream.on('end', function () {

stream.end('goodbye\r\n');

});

stream.pipe(stream);

}).listen(7000);

v6.10.3 主要更新内容

module:

The module loading global fallback to the Node executable’s directory now works correctly on Windows. (Richard Lau) #9283

src:

fix base64 decoding in rare edgecase (Nikolai Vavilov) #11995

tls:

(Trevor Norris) #11947

(Ben Noordhuis) #11898

(jBarz) #11776

fix rare segmentation faults when using TLS

总结

Node.js 从来不是用于解决大规模计算问题而创建的。它的出现是为了解决大规模I/O 的问题,并且在这一点上做的非常好;Node.js 的开发中99%的问题是由误用阻塞操作而造成的;如果项目中不包含CPU密集型操作,也不需要访问任何阻塞的资源,那么你就可以利用的 Node.js 的优点。

Tags:

最近发表
标签列表