ca88手机版登录网页深入浅出Node.js(一):什么是Node.js(转贴)Node.js的基本知识简单汇总。

以下内容转自:http://www.infoq.com/cn/articles/what-is-nodejs/
作者:崔康

Node.js从2009年生至今天,已经发展了零星年有余,其成长的速显著。从于github的访问量过Rails,到去年底Node.jsS创始人Ryan
Dalh加盟Joyent获得企业资助,再届今年发表Windows移植版本,Node.js的前景抱了技术社区的得。InfoQ一直在关怀Node.js的进步,在当年之少数潮Qcon大会(北京站及杭州站)都生特意的讲座。为了还好地力促Node.js在境内的技术推广,我们决定设立“深入浅出Node.js”专栏,邀请来Node.js领域的布道师、开发人员、技术专家来叙述Node.js的各国地方内容,让读者对Node.js有还深刻的刺探,并且能主动投入到新技巧之议论和实践备受。

 

专辑的率先篇稿子《什么是Node.js》尝试从各个角度来论述Node.js的基本概念、发展历史、优势等,对拖欠领域不熟悉的开发人员可以由此本文了解Node.js的有些基础知识。

【编者按】:Node.js自从2009年生至今日,已经迈入了少于年富,其长进之速显著。从当github的访问量过Rails,到去年底Node.jsS创始人Ryan
Dalh加盟Joyent获得企业捐助,再至当年宣告Windows移植版本,Node.js的前景抱了技能社区的得。InfoQ一直在关怀Node.js的进化,在当年的有限蹩脚Qcon大会(北京站同杭州站)都生特意的讲座。为了还好地促进Node.js在境内的技术推广,我们决定办“深入浅出Node.js”专栏,邀请来Node.js领域的布道师、开发人员、技术专家来描述Node.js的诸面内容,让读者对Node.js有再度透彻的垂询,并且会主动投入到新技巧的讨论与履备受。

从今名字说由


关于Node.js的技艺报道更是多,Node.js的写法也是层出不穷,有描绘成NodeJS的,有描绘成Nodejs的,到底哪一样种写法最专业吧,我们不妨以合法的说教。在Node.js的官方网站上,一直用那品种名为”Node“或者”Node.js“,没有意识任何的布道,”Node“用的绝多,考虑到Node这个单词的意思和用太常见,容易给开发人员误解,我们下了亚栽名叫——”Node.js“,js的后缀点出了Node项目之本意,其他的名号五花八门,没有当的出处,我们不推荐下。

专栏的第一首文章《什么是Node.js》尝试从各个角度来阐述Node.js的基本概念、发展历史、优势等,对该领域不熟识的开发人员可以透过本文了解Node.js的有基础知识。

Node.js不是JS应用、而是JS运行平台

从名字说由

有关Node.js的技能报道更为多,Node.js的写法也是层出不穷,有描绘成NodeJS的,有描绘成Nodejs的,到底哪一样种植写法最标准吧,我们不妨以合法的说法。在Node.js的官方网站直达,一直用其种类名为”Node“或者”Node.js“,没有意识其他的布道,”Node“用的顶多,考虑到Node这个单词的意和用太宽广,容易被开发人员误解,我们下了亚栽叫做——”Node.js“,js的后缀点出了Node项目的本意,其他的名号五花八门,没有适合的出处,我们无引进以。

相Node.js这个名字,初家或会见误以为这是一个Javascript应用,事实上,Node.js采用C++语言编写而成为,是一个Javascript的运行条件。为什么用C++语言呢?据Node.js创始人Ryan
Dahl回忆,他最初梦想采取Ruby来描写Node.js,但是后来发觉Ruby虚拟机的习性不可知满足他的要求,后来客尝使用V8引擎,所以选择了C++语言。既然无是Javascript应用,为何叫.js呢?因为Node.js是一个Javascript的运转环境。提到Javascript,大家先是想到的凡屡见不鲜行使的浏览器,现代浏览器包含了各种零件,包括渲染引擎、Javascript引擎等,其中Javascript引擎负责解释实施网页遭到的Javascript代码。作为Web前端最根本之言语有,Javascript一直是前者工程师的专利。不过,Node.js是一个后端的Javascript运行条件(支持之系包括*nux、Windows),这意味着你得编制系统级或者服务器端的Javascript代码,交给Node.js来诠释实施,简单的下令类似于:

Node.js不是JS应用、而是JS运行平台

 

目Node.js这个名字,初家或许会见误以为这是一个Javascript应用,事实上,Node.js采用C++语言编写而改为,是一个Javascript的运转环境。为什么用C++语言呢?据Node.js创始人Ryan
Dahl回忆,他首梦想采取Ruby来形容Node.js,但是后来察觉Ruby虚拟机的性质不克满足他的求,后来外尝采取V8引擎,所以选择了C++语言。既然无是Javascript应用,为何叫.js呢?因为Node.js是一个Javascript的周转条件。提到Javascript,大家首先想到的是常见行使的浏览器,现代浏览器包含了各种零件,包括渲染引擎、Javascript引擎等,其中Javascript引擎负责解释施行网页遭到之Javascript代码。作为Web前端最重点的言语之一,Javascript一直是前者工程师的专利。不过,Node.js是一个后端的Javascript运行环境(支持之系包括*nux、Windows),这表示你可以编制系统级或者服务器端的Javascript代码,交给Node.js来说明施行,简单的一声令下类似于:

#node helloworld.js

Node.js采用了Google
Chrome浏览器的V8引擎,性能好好,同时还提供了成百上千系统级的API,如文件操作、网络编程等。浏览器端的Javascript代码在运作时见面受各种安全性的限定,对客户系统的操作简单。相比之下,Node.js则是一个两全的后台运行时,为Javascript提供了外语言会落实之博效能。

#node helloworld.jsNode.js

Node.js采用事件驱动、异步编程,为网络服务而计划

连带厂商内容

应用了Google
Chrome浏览器的V8引擎,性能大好,同时还提供了无数系统级的API,如文件操作、网络编程等。浏览器端的Javascript代码在运作时见面遭受各种安全性的限定,对客户系统的操作简单。相比之下,Node.js则是一个到的后台运行时,为Javascript提供了任何语言会实现的无数效益。

特性优化最佳实践经验谈

Node.js采用事件驱动、异步编程,为网络服务而设计

超级App的实时性能监控和性能优化履

事件驱动这个词连无陌生,在少数传统语言的网络编程中,我们见面为此到回调函数,比如当socket资源达到某种状态时,注册之回调函数就会见履。Node.js的筹划思想中盖事件驱动为主干,它提供的多数API都是依据事件的、异步的作风。以Net模块为条例,其中的net.Socket对象就起以下事件:connect、data、end、timeout、drain、error、close等,使用Node.js的开发人员需要基于自己之事情逻辑注册相应的回调函数。这些回调函数都是异步执行的,这表示虽然于代码结构中,这些函数看似是各个注册之,但是它并无负让我出现的一一,而是等相应的轩然大波触发。事件驱动、异步编程的筹划(感兴趣之读者可查看笔者的外一样首稿子《Node.js的异步编程风格》),重要的优势在,充分利用了系统资源,执行代码无须阻塞等待某种操作完成,有限的资源可以用于其它的任务。此类设计非常适合于后端平的网络服务编程,Node.js的靶子呢在于此。在服务器出中,并发的要处理是个坏题材,阻塞式的函数会招致资源浪费和日推移。通过波注册、异步函数,开发人员可以增长资源的利用率,性能也会改进。

微信图片视频背后的EB级存储引擎计划

自从Node.js提供的支撑模块中,我们可见到包括文件操作在内的累累函数都是异步执行之,这同传统语言在区别,而且为了有利于服务器出,Node.js的网模块特别多,包括HTTP、DNS、NET、UDP、HTTPS、TLS等,开发人员可以以斯基础及快构建Web服务器。以简单的helloworld.js为例:

漏斗模型:京东物流系统高并发架构演进的路

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(80, "127.0.0.1");

如何开发一个商业智能推荐系统?

 

相关赞助商

ca88手机版登录网页 1

ArchSummit深圳2017,7月7-8日,深圳·华侨城洲际酒店,精彩内容抢先看

 

事件驱动这个词连无生疏,在少数传统语言的网络编程中,我们见面为此到回调函数,比如当socket资源及某种状态时,注册之回调函数就会见履行。Node.js的设计思想中以事件驱动为基本,它提供的绝大多数API都是因事件的、异步的作风。以Net模块为条例,其中的net.Socket对象就出以下事件:connect、data、end、timeout、drain、error、close等,使用Node.js的开发人员需要根据自己之作业逻辑注册相应的回调函数。这些回调函数都是异步执行的,这意味着虽然于代码结构面临,这些函数看似是逐一注册之,但是它们并无负让自身出现的一一,而是等相应的轩然大波触发。事件驱动、异步编程的宏图(感兴趣之读者可查看笔者的别样一样首稿子《Node.js的异步编程风格》),重要之优势在,充分利用了系统资源,执行代码无须阻塞等待某种操作完成,有限的资源得以用来其它的任务。此类设计非常适合于晚端平的网络服务编程,Node.js的靶子吗在于这个。在服务器出中,并发的伸手处理是只大题材,阻塞式的函数会导致资源浪费和岁月推迟。通过波注册、异步函数,开发人员可以增进资源的利用率,性能也会见改进。

从今Node.js提供的支撑模块中,我们得以看到包括文件操作在内的广大函数都是异步执行之,这与习俗语言是区别,而且为了方便服务器出,Node.js的网模块特别多,包括HTTP、DNS、NET、UDP、HTTPS、TLS等,开发人员可以以这个基础及高速构建Web服务器。以简要的helloworld.js为条例:

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(80, "127.0.0.1");

点的代码搭建了一个简约的http服务器(运行示例部署在http://helloworld.cnodejs.net/遭遇,读者可以拜),在地方监听80端口,对于随意的http请求,服务器都回来一个头状态码为200、Content-Type’值为text/plain’的”Hello
World“文字响应。从者小例子中,我们可见到几碰:

  • Node.js的网络编程比较有利,提供的模块(在这边是http)开放了善上手的API接口,短短几履行代码就得构建服务器。
  • 反映了事件驱动、异步编程,在createServer函数的参数中指定了一个回调函数(采用Javascript的匿名函数实现),当起http请求发送过来时,Node.js就见面调用该回调函数来处理要并应。当然,这个事例相对简便易行,没有最多的风波注册,在后的稿子中读者见面看到又多之骨子里例子。

面的代码搭建了一个简易的http服务器(运行示例部署于
http://helloworld.cnodejs.net/
中,读者可拜),在本土监听80端口,对于自由的http请求,服务器都回来一个满头状态码为200、Content-Type’值为text/plain’的”Hello
World“文字响应。从者小例子中,我们可看几碰:

Node.js的特点

下我们的话说Node.js的特征。事件驱动、异步编程的特点刚才已经详尽说了了,这里不再另行。

Node.js的属性是。按照创始人Ryan
Dahl的说教,性能是Node.js考虑的重要元素,选择C++和V8而非是Ruby或者其它的虚拟机也是因性的目的。Node.js在设计上也是比异常种,它为仅进程、单线程模式运行(很震惊,对吧?这跟Javascript的运转方式相同),事件驱动机制是Node.js通过内单线程高效率地维护事件循环队列来实现的,没有多线程的资源占用和上下文切换,这表示当周边的http请求,Node.js凭借事件驱动搞定一切,习惯了民俗语言的网络服务开发人员可能针对多线程并发和合作十分熟悉,但是对Node.js,我们需要经受以及透亮它们的性状。由此我们是不是可推测出这般的筹划会招致负载的压力集中在CPU(事件循环处理?)而休是内存(还记得Java虚拟机抛出OutOfMemory异常的日子呢?),眼见为实,不如来探视淘宝共享数据平台团队对Node.js的属性测试:

  • 物理机配置:RHEL 5.2、CPU 2.2GHz、内存4G
  • Node.js应用场景:MemCache代理,每次取100许节约数据
  • 连接池大小:50
  • 并发用户数:100
  • 测试结果(socket模式):内存(30M)、QPS(16700)、CPU(95%)

起者的结果,我们可见到在这么的测试场景下,qps能够达成16700差,内存仅占据30M(其中V8积聚占用22M),CPU则达95%,可能成瓶颈。此外,还产生许多实践者对Node.js做了性分析,总的来说,它的性能为人信服,也是深受欢迎的要原因。既然Node.js采用单进程、单线程模式,那么以今日基本上按硬件流行的环境面临,单对性能良好之Node.js如何使基本上核CPU呢?创始人Ryan
Dahl建议,运行多个Node.js进程,利用一些通信机制来协调各项任务。目前,已经有好多叔正值的Node.js多进程支持模块发布,专栏后面的章会详细讲述Node.js在多核CPU下之编程。

Node.js的别一个特征是其支持之编程语言是Javascript。关于动态语言及静态语言的利害比较在此处不再展开讨论。只说其三触及:

var hostRequest = http.request(requestOptions,function(response) {
    var responseHTML ='';
    response.on('data', function (chunk) {
        responseHTML = responseHTML + chunk;
    });
    response.on('end',function(){
        console.log(responseHTML);
        // do something useful
   });
});

当地方的代码中,我们需要在end事件受到处理responseHTML变量,由于Javascript的闭包特性,我们得以当个别个回调函数之外定义responseHTML变量,然后以data事件对应之回调函数中连修改其价,并最终以end事件受到访问处理。

  1. Javascript作为前端工程师的主力语言,在技巧社区被来一定之号召力。而且,随着Web技术的连向上,特别是前者的基本点增加,不少前端工程师开始试水”后台应用“,在过剩使Node.js的店家被,工程师还代表因习惯了Javascript,所以选择Node.js。
  2. Javascript的匿名函数和闭包特性非常适合事件驱动、异步编程,从helloworld例子中我们好观看回调函数采用了匿名函数的样式来实现,很有利。闭包的作用则又充分,看下的代码示例:
  3. Javascript在动态语言中性能于好,有开发人员对Javacript、Python、Ruby等动态语言做了性能分析,发现Javascript的性要好为其他语言,再增长V8引擎也是同类的大器,所以Node.js的属性也得益其中。

Node.js的纱编程比较有利,提供的模块(在此地是http)开放了好上手的API接口,短短几尽代码就可构建服务器。

Node.js发展简史

2009年2月,Ryan
Dahl在博客上公布准备根据V8创建一个轻量级的Web服务器并提供平等法库。

2009年5月,Ryan
Dahl在GitHub上揭示了初期版本的一些Node.js包,随后几独月里,有人开应用Node.js开发使用。

2009年11月同2010年4月,两交JSConf大会都安排了Node.js的讲座。

2010年年底,Node.js获得说话计算服务商Joyent资助,创始人Ryan
Dahl加入Joyent全职肩负Node.js的上进。

2011年7月,Node.js在微软的支持下布Windows版本。

反映了事件驱动、异步编程,在createServer函数的参数中指定了一个回调函数(采用Javascript的匿名函数实现),当起http请求发送过来时,Node.js就会见调用该回调函数来处理要并应。当然,这个事例相对简便易行,没有尽多的波注册,在其后的稿子中读者见面见到更多之莫过于例子。

Node.js应用案例

虽Node.js诞生刚刚两年差不多,但是其发展势头逐渐赶超Ruby/Rails,我们以此列举了片企业应用Node.js的案例,听听来自客户之鸣响。

于社交网站LinkedIn最新发表的走采用中,NodeJS是欠运动使用的后台基础。LinkedIn移动开主管Kiran
Prasad对媒体表示,其总体运动软件平台都出于NodeJS构建而改为:

LinkedIn内部使用了大气之技能,但是当活动服务器即等同块,我们了依据Node。

(使用其的原由)第一,是为该灵活性。第二,如果你打探Node,就会见发现她极其拿手的事务是和外服务通信。移动应用必须同我们的平台API和数据库交互。我们没有做最好多多少解析。相比之前运用的Ruby
on
Rails技术,开发团队发现Node在性方面提高广大。他们在各个台物理机上走了15独虚拟服务器(15独实例),其中4个实例即可处理对加倍流量。容量评估因负载测试的结果。

店社会化服务网站Yammer则运用Node创建了针对性该自平台的跨域代理服务器,第三正在的开发人员可以经该服务器实现由自身域托管的Javascript代码与Yammer平台API的AJAX通信。Yammer平台技术主管Jim
Patterson对Node的助益和症结提出了友好的看法:

(优点)因为Node是基于事件驱动和无阂的,所以非常适合处理并发请求,因此构建以Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现使好得几近。此外,与Node代理服务器交互的客户端代码是由javascript语言编写的,因此客户端以及劳动器端都因此同样种语言编写,这是可怜优秀之工作。

(缺点)Node是一个相对新的开源项目,所以无绝平静,它总是一直当转换,而且少足够多之老三方库支持。看起,就比如是Ruby/Rails当年之法。

名牌项目托管网站GitHub也尝尝了Node应用。该Node应用名叫NodeLoad,是一个存档下载服务器(每当你下载某存储分支的tarball或者zip文件时就是会见用到其)。GitHub之前的存档下载服务器采用Ruby编写。在本来体系受,下载存档的乞求会创一个Resque任务。该任务实际以存档服务器上运行一个git
archive命令,从某个文件服务器遭受取出数据。然后,初始的呼吁分配给您一个小型Ruby
Sinatra应用等该任务。它实际上只是当检查memcache
flag是否有,然后重新重定向到结尾的下载地址及。旧体系运作约3独Sinatra实例和3单Resque
worker。GitHub的开发人员觉得这是Node应用的好会。Node基给事件驱动,相比Ruby的死模型,Node能够再好地处理git存档。在编写新下载服务器过程遭到,开发人员觉得Node非常适合该功能,此外,他们还里应用了Node库socket.io来监督下载状态。

不但当国外,Node的长处也一致引发了国内开发人员的注意,淘宝即便实际上利用了Node技术:

MyFOX
是一个数码处理中件,负责从一个MySQL集众多被提取数据、计算并出口统计结果。用户提交一段SQL语句,MyFOX根据该SQL命令的语义,生成各个数据库分片所急需实践的查询语句,并发送到各个分片,再以结果进行汇总和计算。
MyFOX的性状是CPU密集,无文件IO,并就处理才念数据。起初MyFOX使用PHP编写,但遇到许多题材。例如PHP是单线程的,MySQL又要阻塞查询,因此杀为难并发请求数据,后来之化解方案是使用nginx和dirzzle,并因HTTP协议落实接口,并由此curl_multi_get命
令进行呼吁。不过MyFOX项目组最终还是决定采用Node.js来落实MyFOX。

分选Node.js有众多点的原由,比如考虑了感兴趣以及社区发展,同时为欲得以加强并发能力,榨干CPU。例如,频繁地开辟和倒闭连接会吃大气端口处等候状态,当起数量上后,时常会因端口不足够用(处于TIME_WAIT状态)而导致连日失败。之前反复是经过改动系统设置来减等时以绕开之荒唐,然而以连接池便可以充分好地解决这个题材。此外,以前MyFOX会在好几缓存失效的情下起很凝聚的访问压力,使用
Node.js便可以共享查询状态,让某些请求“等待片刻”,以便系统再度填写缓存内容。

Node.js的特点

小结

正文简要介绍了Node.js的基本知识,包括概念、特点、历史、案例等等。作为一个才2年之平台,Node.js的发展势头有目共睹,越来越多之公司开关心并尝试Node.js,前后端开发人员应该了解有关的内容。

作者的微信公众号“老崔瞎编”,关注IT趋势,承载前沿、深入、有温的情。感兴趣之读者可搜索ID:laocuixiabian,或者扫描下方二维码加关注。

ca88手机版登录网页 2

脚我们的话说Node.js的风味。事件驱动、异步编程的表征刚才已经详尽说过了,这里不再另行。

参考文献

[1] http://nodejs.org/

[2] http://beakkon.com/geek/node.js/why-node.js-single-thread-event-loop-javascript

[3] http://www.tbdata.org/archives/1285

[4] http://www.infoq.com/interviews/node-ryan-dahl

[5] http://www.infoq.com/cn/news/2011/08/enterprise-nodejs

[6] http://www.infoq.com/cn/news/2010/11/nodejs-joyent

[7] http://www.infoq.com/cn/news/2011/06/node-exe

[8] http://nodenode.com/post/1176414531/node-js-a-short-history

[9] http://www.infoq.com/cn/news/2011/05/nodeparty-hangzhou

【编者按】:本专栏欢迎有志于宣传以及拓宽Node.js的布道师、开发人员和技能专家投稿,有意者请通过邮件及本专栏主持人崔康(cuikang[at]infoq.com)联系。

Node.js的习性是。按照创始人Ryan
Dahl的说法,性能是Node.js考虑的要因素,选择C++和V8而无是Ruby或者其他的虚拟机也是冲性的目的。Node.js在计划及吧是比较特别种,它以仅进程、单线程模式运作(很受惊,对吧?这同Javascript的运行方式同样),事件驱动机制是Node.js通过中单线程高效率地保护事件循环队列来实现之,没有多线程的资源占用和上下文切换,这表示当广大的http请求,Node.js凭借事件驱动搞定所有,习惯了人情语言的网络服务开发人员可能对多线程并发和合作十分熟悉,但是当Node.js,我们要经受以及理解它们的特性。由此我们是不是可以推测出这么的设计会招负载的下压力集中在CPU(事件循环处理?)而休是内存(还记Java虚拟机抛出OutOfMemory异常的日子也?),眼见为实,不如来探望淘宝共享数据平台团队对Node.js的特性测试:

物理机配置:RHEL 5.2、CPU 2.2GHz、内存4G

Node.js应用场景:MemCache代理,每次得到100许节约数据

连接池大大小小:50

连发用户数:100

测试结果(socket模式):内存(30M)、QPS(16700)、CPU(95%)

自者的结果,我们好见见于这样的测试场景下,qps能够达成16700不好,内存仅占据30M(其中V8积聚占用22M),CPU则上95%,可能成瓶颈。此外,还闹广大实践者对Node.js做了性分析,总的来说,它的性质被人口认,也是吃欢迎的基本点原因。既然Node.js采用单进程、单线程模式,那么当当今大抵对硬件流行的条件遭到,单对性能出色之Node.js如何利用基本上核CPU呢?创始人Ryan
Dahl建议,运行多个Node.js进程,利用一些通信机制来协调各项任务。目前,已经发生无数叔正在的Node.js多进程支持模块发布,专栏后面的章会详细描述Node.js在多核CPU下之编程。

Node.js的另一个特性是其支持之编程语言是Javascript。关于动态语言与静态语言的利害比较在这里不再展开讨论。只说其三接触:

var hostRequest = http.request(requestOptions,function(response) {
  var responseHTML ='';
  response.on('data', function (chunk) {
    responseHTML = responseHTML + chunk;
  });
  response.on('end',function(){
    console.log(responseHTML);
    // do something useful
  });
});

于面的代码中,我们需要在end事件受到处理responseHTML变量,由于Javascript的闭包特性,我们可以当片个回调函数之外定义responseHTML变量,然后于data事件对应之回调函数中连修改其价值,并最终于end事件受到做客处理。

Javascript作为前端工程师的主力语言,在技能社区被发出相当的号召力。而且,随着Web技术的缕缕前进,特别是前者的要害增加,不少前端工程师开始试水”后台应用“,在多用Node.js的公司遭到,工程师还代表因为习惯了Javascript,所以选择Node.js。

Javascript的匿名函数和闭包特性非常适合事件驱动、异步编程,从helloworld例子中我们得以看来回调函数采用了匿名函数的款式来促成,很有益。闭包的企图则再充分,看下面的代码示例:

Javascript于动态语言中性能比好,有开发人员对Javacript、Python、Ruby等动态语言做了性分析,发现Javascript的性质要好叫外语言,再添加V8引擎也是同类的超人,所以Node.js的性能为沾光其中。

Node.js发展简史

2009年2月,Ryan
Dahl在博客及揭晓准备根据V8创建一个轻量级的Web服务器并提供相同模仿库。

2009年5月,Ryan
Dahl在GitHub上颁布了初期版本的有的Node.js包,随后几只月里,有人开始以Node.js开发使。

2009年11月和2010年4月,两交JSConf大会都配备了Node.js的讲座。

2010年年底,Node.js获得说话计算服务商Joyent资助,创始人Ryan
Dahl加入Joyent全职承担Node.js的上进。

2011年7月,Node.js在微软的支撑下布Windows版本。

Node.js应用案例

虽然Node.js诞生刚刚两年差不多,但是其发展势头逐渐赶超Ruby/Rails,我们以此间列举了部分企业应用Node.js的案例,听听来自客户之动静。

以交际网站LinkedIn最新披露之运动使用被,NodeJS是该走采用之后台基础。LinkedIn移动支付主管Kiran
Prasad对传媒代表,其全运动软件平台都是因为NodeJS构建而改为:

LinkedIn内部采用了大量的技艺,但是以运动服务器就同一片,我们全然依据Node。

(使用它们的来由)第一,是坐那个灵活性。第二,如果您了解Node,就见面发觉其最好擅长的政工是与其他服务通信。移动使用得与我们的平台API和数据库交互。我们尚无举行最多数据解析。相比前用的Ruby
on
Rails技术,开发组织意识Node在性质方面加强广大。他们于各级令物理机上跑了15独虚拟服务器(15个实例),其中4单实例即可处理对倍增流量。容量评估因负载测试的结果。

庄社会化服务网站Yammer则应用Node创建了对其本人平台的跨域代理服务器,第三正值的开发人员可以由此该服务器实现自自身域托管的Javascript代码与Yammer平台API的AJAX通信。Yammer平台技术主管Jim
Patterson对Node的亮点和瑕疵提出了和睦之视角:

(优点)因为Node是冲事件驱动和任阂的,所以非常适合处理并发请求,因此构建以Node上之代理服务器相比另技术实现(如Ruby)的服务器表现要好得差不多。此外,与Node代理服务器交互的客户端代码是由于javascript语言编写的,因此客户端与服务器端都为此平等栽语言编写,这是格外精美的业务。

(缺点)Node是一个针锋相对新的开源项目,所以不绝平静,它连接一直当变,而且少足够多的老三方库支持。看起,就如是Ruby/Rails当年底金科玉律。

举世闻名项目托管网站GitHub也尝了Node应用。该Node应用叫NodeLoad,是一个存档下载服务器(每当你下载某存储分支的tarball或者zip文件时即便见面为此到它们)。GitHub之前的存档下载服务器采用Ruby编写。在原有体系面临,下载存档的恳求会创一个Resque任务。该任务实际在存档服务器上运行一个git
archive命令,从有文件服务器受到取出数据。然后,初始的乞求分配受您一个小型Ruby
Sinatra应用等该任务。它实在只是在自我批评memcache
flag是否在,然后再度重定向到最终的下载地址及。旧体系运作约3单Sinatra实例和3只Resque
worker。GitHub的开发人员觉得就是Node应用的好时。Node基给事件驱动,相比Ruby的隔阂模型,Node能够更好地拍卖git存档。在编制新下载服务器过程中,开发人员觉得Node非常适合该功能,此外,他们还里下了Node库socket.io来监督下载状态。

不仅于海外,Node的长处也一如既往吸引了国内开发人员的顾,淘宝就实际用了Node技术:

MyFOX
是一个数量处理当中件,负责从一个MySQL集众多被提取数据、计算并出口统计结果。用户提交一段SQL语句,MyFOX根据该SQL命令的语义,生成各个数据库分片所欲实施之询问语句,并发送到各个分片,再将结果开展集中和计算。
MyFOX的性状是CPU密集,无文件IO,并就处理才念数据。起初MyFOX使用PHP编写,但遇到许多问题。例如PHP是单线程的,MySQL又要阻塞查询,因此杀为难并发请求数据,后来的解决方案是采用nginx和dirzzle,并基于HTTP协议落实接口,并透过curl_multi_get命
令进行呼吁。不过MyFOX项目组最终还是控制采用Node.js来贯彻MyFOX。

择Node.js有无数方面的原委,比如考虑了兴与社区发展,同时也期得以增强并发能力,榨干CPU。例如,频繁地开拓和关连接会给大气端口处等候状态,当出现数量上之后,时常会盖端口不足够用(处于TIME_WAIT状态)而招致连日失败。之前反复是经改动系统装置来压缩等时以绕开之错误,然而以连接池便得以挺好地解决这个问题。此外,以前MyFOX会在好几缓存失效的动静下冒出大凝聚的访问压力,使用
Node.js便得以共享查询状态,让某些请求“等待片刻”,以便系统重新填写缓存内容。

小结

正文简要介绍了Node.js的基本知识,包括概念、特点、历史、案例等等。作为一个仅2春秋之平台,Node.js的发展势头有目共睹,越来越多之局开关心并尝试Node.js,前后端开发人员应该了解相关的内容。

君可能感兴趣的篇章:

  • Node.js中Request模块处理HTTP协议要的主导使用教程
  • Node.js的MongoDB驱动Mongoose基本用教程
  • 以Node.js为任何程序编制扩展的基本办法
  • NodeJs基本语法和种

相关文章

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图