正如维基百科 所说:“Node.js 是谷歌 V8 引擎、libuv平台抽象层 以及主体使用 Javscript 编写的核心库三者集合的一个包装外壳。”(注:V8是谷歌开发的,目前公认最快的 Javascript 解析引擎,libuv 是一个开源的、为 Node 定制而生的跨平台的异步 IO 库。)
请记住:Node.js 从来不是用于解决大规模计算问题而创建的。它的出现是为了解决大规模I/O 的问题,并且在这一点上做的非常好。
专门针对初学者的Node.js教程,这是我看过的第一篇Node.js教程,其中的demo跟着coding&running下来,对Node.js已经有了基本的了解。
1. 首先要清楚Node不是一个Web服务器,这十分重要。它本身并不能做任何事情。它无法像Apache那样工作。如果你希望它成为一个HTTP服务器,你必须借助它内置库自己编写。Node.js只是计算机上执行代码的另一种方式,它是一个简单的JavaScript Runtime.可以作为一个脚本语言的强有力的替代者,因为Node.js的fs(filesystem)模块非常强大。
2. 异步回调
正如在上例中看到的那样,Node.js典型的模式是使用异步回调。基本上,你告诉Node.js要做的事,它执行完后便会调用你的函数(回调函数)。这是因为Node是单线程的。在你等待回调函数执行过程中,Node可继续执行其他事务,不必被阻塞直到该请求完毕。
这对于Web服务器尤其重要。在现代Web应用访问数据库的过程中特别普遍。当你等待数据库返回结果的过程中,Node可以处理更多请求。与每次连接仅处理一个线程相比,它使你以很小的开销来处理成千上万个并行连接。
3. Express为一个框架,可使创建网站的过程十分简单。
4. 如果你的程序包含很多“依赖”(Dependency),那再利用该方法安装它们就不合适了。为此npm提供了一个package.json文件。
reference:
专门针对初学者的Node.js教程,这是我看过的第一篇Node.js教程,其中的demo跟着coding&running下来,对Node.js已经有了基本的了解。
下面的都是从该文章的评论中扩展出来的。挑一些好的articles,记录下来。
Node.js 究竟是什么?一个 “编码就绪” 服务器。从这篇文章中学到最有用的一点就是RESTful API的那个demo。
Node 对什么有好处?
到此为止,您可能能够回答 “Node 是什么” 这个问题了,但您可能还有一个问题:“Node 有什么用途?” 这是一个需要提出的重要问题,因为肯定有些东西能受益于 Node。
它对什么有好处?
正如您此前所看到的,Node 非常适合以下情况:在响应客户端之前,您预计可能有很高的流量,但所需的服务器端逻辑和处理不一定很多。Node 表现出众的典型示例包括:
RESTful API
提供 RESTful API 的 Web 服务接收几个参数,解析它们,组合一个响应,并返回一个响应(通常是较少的文本)给用户。这是适合 Node 的理想情况,因为您可以构建它来处理数万条连接。它仍然不需要大量逻辑;它本质上只是从某个数据库中查找一些值并将它们组成一个响应。由于响应是少量文本,入站请求也是少量的文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的 API 需求。
Twitter 队列
想像一下像 Twitter 这样的公司,它必须接收 tweets 并将其写入数据库。实际上,每秒几乎有数千条 tweet 达到,数据库不可能及时处理高峰时段所需的写入数量。Node 成为这个问题的解决方案的重要一环。如您所见,Node 能处理数万条入站 tweet。它能快速而又轻松地将它们写入一个内存排队机制(例如 memcached),另一个单独进程可以从那里将它们写入数据库。Node 在这里的角色是迅速收集 tweet,并将这个信息传递给另一个负责写入的进程。想象一下另一种设计(常规 PHP 服务器会自己尝试处理对数据库本身的写入):每个 tweet 都会在写入数据库时导致一个短暂的延迟,因为数据库调用正在阻塞通道。由于数据库延迟,一台这样设计的机器每秒可能只能处理 2000 条入站 tweet。每秒处理 100 万条 tweet 则需要 500 个服务器。相反,Node 能处理每个连接而不会阻塞通道,从而能够捕获尽可能多的 tweets。一个能处理 50,000 条 tweet 的 Node 机器仅需 20 台服务器即可。
电子游戏统计数据
如果您在线玩过《使命召唤》这款游戏,当您查看游戏统计数据时,就会立即意识到一个问题:要生成那种级别的统计数据,必须跟踪海量信息。这样,如果有数百万玩家同时在线玩游戏,而且他们处于游戏中的不同位置,那么很快就会生成海量信息。Node 是这种场景的一种很好的解决方案,因为它能采集游戏生成的数据,对数据进行最少的合并,然后对数据进行排队,以便将它们写入数据库。使用整个服务器来跟踪玩家在游戏中发射了多少子弹看起来很愚蠢,如果您使用 Apache 这样的服务器,可能会 有一些有用的限制;但相反,如果您专门使用一个服务器来跟踪一个游戏的所有统计数据,就像使用运行 Node 的服务器所做的那样,那看起来似乎是一种明智之举。
reference:
node.js 初体验,这也是非常好的一篇Node.js入门文章。讲的特别详细,尤其是对code讲的特别清楚,相比较前两篇而言,这个更具有入门指导性意义。如果看完了上面两篇文章,你还是不懂Express框架是如何加载的,你还是不同异步回调是怎么回事,看完这篇你就懂了。
Node是个啥?
1.Node 是一个服务器端 JavaScript 解释器,可是真的以为JavaScript不错的同学学习Node就能轻松拿下,那么你就错了,总结:水深不深我还不知道,不过确实不浅。
2.Node 的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个物理机的连接代码。处理高并发和异步I/O是Node受到开发人员的关注的原因之一。
3.Node 本身运行Google V8 JavaScript引擎,所以速度和性能非常好,看chrome就知道,而且Node对其封装的同时还改进了其处理二进制数据的能力。因此,Node不仅仅简单的使用了V8,还对其进行了优化,使其在各种环境下更加给力。(什么是V8 JavaScript 引擎?请“百度知道”)
4.第三方的扩展和模块在Node的使用中起到重要的作用。下面也会介绍下载npm,npm就是模块的管理工具,用它安装各种 Node 的软件包(如express,redis等)并发布自己为Node写的软件包 。
reference:
还有一个被推荐的入门:新手如何快速入门node.js
根据Node js 开发入门教程第五章的一个使用nodejs + express + mongodb开发微博模块的小例子,开发一个入门demo 也就是完成第五章的demo,在你的机器上安装nodejs ,mongodb,完成这个微博的demo, 另外在这个demo上附加3个功能要求:
1.注册增加验证码功能
2.登录,密码连续输入错误3次 ,1个小时内不得登录
3.首页和用户页面的分页显示功能
上面提到的一本书:node.js开发入门教程:Node.js开发指南_中文正版
这里再引用一下开源中国社区的一个帖子,感觉很多idea可以参考:
node.js用来做什么?请大侠讲一下应用实例
1. 最简单的就是,java太heavy,PHP、ruby on rail等你需要学习一门新的语言,node.js和mongoDB的出现让web开发变为了以前的前端工程师一个人可以搞定的事情了。
以上为玩笑,node.js是事件驱动的,适合高IO的场景,如果你有大量的计算那还是要选择其他的语言,但是大多数的web应用或服务都是简单的增删改查,只有少量的逻辑计算,这是node.js最擅长处理的场景,因为当处理进入io之后空闲下来的CPU会继续做下一个请求的处理,并不会等待io完成,而是当io完成后再回来继续处理下面的逻辑,这样就大大节省了CPU的空耗事件。另外单进程的node.js跟那些N多个进程的东西比肯定是node.js更节省资源。
2. ode.js的用途:
事件驱动:node.js接到一个请求,马上绑定的事件,如request.bind('succ', function(){ print '响应给客户';} ); 也就是像ajax的,异步响应客户,只不过这过程发生在服务端。
高流量且逻辑简单:做print 'hello world'之类的输出吧,可能涉及到数据库的读取输出,都不能用node.js..
3. 你想知道他为什么好?这么跟你说吧。web服务系统性能上有几个考虑的地方,1连接数。2.后台业务。后台业务包括业务逻辑和数据存储。市面上有很多测试并发连接数的软件不知道你用过没有。像iis和jboss这些东西都有一个并发连接数的上线。他是由于这么web服务器你建立1个连接就开1个进程,每个进程需要基本内存大约是几mb,这样web服务器能开多少连接数不就由web服务器内存决定了。而nodejs就开一个进程,用事件驱动,那就是个转发器,连接器,其他业务逻辑和数据存储那是本地机器的问题。你说性能优化哪里都可以优化是对的。可以优化数据库,可以优化业务逻辑。但是系统瓶颈一般在哪里?就像中国的订票系统似的,在于web服务器,老的web服务器并发连接数是有限的。所以中国订票系统人1多反映就慢,他慢的原因不是后台业务处理和数据库慢,这个那个干订票系统公司的人已经说了,系统慢不是机房里面数据连接的问题。其实他们意思就是web服务器连接数有问题。应该尝试用nodejs。至于RESTful这是一种架构风格,其他软件可有支持,不是它的特定。他的特定是单进程,异步通讯。搞it都懂异步通讯要比同步通讯快很多的道理把。
reference:
推荐几个学习Node的网址:
http://nodejs.org/
http://cnodejs.org/ 由淘宝人建立的社区,内有Node中文文档
http://www.oschina.net/p/nodejs/
http://www.ibm.com/developerworks/cn/opensource/os-nodejs/index.html