有关 Node.js的技术报道越来越多,Node.js 的写法也是五花八门,有写成 NodeJS 的,有写成 Nodejs的,到底哪一种写法最标准呢,我们不妨遵循官方的说法。在 Node.js 的官方网站上, 一直将其项目称之为”Node“或者”Node.js“,没有发现其他的说法, ”Node“用的最多,考虑到 Node 这个单词的意思和用途太广泛,容易让开发人员误解,我们采用了第二种称呼 - ”Node.js“,js 的后缀点出了 Node项目的本意,其他的名称五花八门,没有确切的出处,我们不推荐使用。
Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物理机的连接代码。
如果您听说过 Node,或者阅读过一些文章,宣称 Node 是多么多么的棒,那么您可能会想:“Node 究竟是什么东西?” 即便是在参阅 Node 的主页之后,您甚至可能还是 不明白 Node 为何物?Node 肯定不适合每个程序员,但它可能是某些程序员一直苦苦追寻的东西。
为试图解释什么是 Node.js,本文将简要介绍一些背景信息:它要解决的问题,它如何工作,如何运行一个简单应用程序,最后,Node 在什么情况下是一个好的解决方案。本文不涉及如何编写一个复杂的 Node 应用程序,也不是一份全面的 Node 教程。阅读本文应该有助于您决定是否应该继续学习 Node,以便将其用于您的业务。
这本迷你书的发布可以说是众望所归,笔者作为“深入浅出Node.js”专栏的发起人倍感欣慰。如今已是2013年盛夏,距离专栏的第一篇文章发布已经快两年时间,可是在每月InfoQ中文站的文章访问量Top10排行榜上,总有该专栏的某一篇或者几篇文章位列其中,这足以说明,“深入浅出Node.js”这个专题得到了广大读者的肯定和欢迎。
一门技术的发展历程类似于人生,总要经历孕育、诞生、成长、成熟、衰落等几个过程,作为技术人员,应该敏锐地观察和把握住所在领域的技术发展趋势,才不至于被技术的浪潮所淹没。专栏诞生之初,应该是Node.js技术的萌芽之后并在起步成长的关键阶段。InfoQ中文站适时地推出了这个专栏,从Node.js的基本概念、到模块管理、再到异步IO,按照循序渐进的思路向读者呈现了Node.js的魅力。作者永强兄(朴灵)是一位非常地道的Node.js实践者和布道师,他对前后端的Javascript领域都有着多年的一线经验,对Node.js技术的优缺点也有着独到的见解。虽然工作很忙,但永强还是积极地为InfoQ撰稿,从而成就了这个专栏和这本迷你书。在Qcon北京2013技术大会上,永强更是担任了“Node.js”专题的出品人,俨然已是国内Node.js社区的领袖。
时至今日,Node.js技术已经进入了青年时期,不论你是否感觉到,它已经慢慢渗入到了很多公司、软件、技术者的心里。如果说在专栏诞生之初,开发者只是观望和评估,那么现在越来越多的领域已经把Node.js应用于生产环境当中并取得了预期的效果。如果你在互联网领域或者企业级Web领域,如果是前端JS或者后端Web服务器开发者,那么Node.js现在是一门必须要了解、最好能够掌握的好技术,一方面可以直接应用于自己的产品和解决方案中,另一方面Node.js的设计思想也能够开阔架构师和开发者的思维方式。这本迷你书正是你了解Node.js技术的最佳入口之一,除此之外,InfoQ中文站还发布了许多Node.js相关的新闻、文章和讲座,读者可以边看书边阅读其他网上内容,相信会收获不少。
在这个信息爆炸的年代,我们每天要面对成千上万的数据输入,大脑已经在超负荷运转了。有多少次我们曾经计划开始读一本好书、计划开始锻炼身体、计划开始写点日记,有多少次我们回首发现一切如故。“不积跬步无以至千里”,下载这本迷你书,设定一个阅读计划,给自己一个丰富有用知识、改善自身习惯的机会吧:)
深入浅出Node.js(一):什么是Node.js
深入浅出Node.js(二):Node.js&NPM的安装与配置
深入浅出Node.js(三):深入Node.js的模块机制
深入浅出Node.js(四):Node.js的事件机制
深入浅出Node.js(五):初探Node.js的异步I/O实现
深入浅出Node.js(六):Buffer那些事儿
深入浅出Node.js(七):Connect模块解析(之一)
深入浅出Node.js(八):Connect模块解析(之二)静态文件中间件
Node 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”。当前的服务器程序有什么问题?我们来做个数学题。在 Java™ 和 PHP 这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB 的配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发连接数量是 4,000 个用户。随着您的客户群的增长,如果希望您的 Web 应用程序支持更多用户,那么,您必须添加更多服务器。当然,这会增加服务器成本、流量成本和人工成本等成本。除这些成本上升外,还有一个潜在技术问题,即用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。鉴于上述所有原因,整个 Web 应用程序架构(包括流量、处理器速度和内存速度)中的瓶颈是:服务器能够处理的并发连接的最大数量。
Node 解决这个问题的方法是:更改连接到服务器的方式。每个连接发射一个在 Node 引擎的进程中运行的事件,而不是为每个连接生成一个新的 OS 线程(并为其分配一些配套内存)。Node 声称它绝不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。Node 还宣称,运行它的服务器能支持数万个并发连接。
现在您有了一个能处理数万个并发连接的程序,那么您能通过 Node 实际构建什么呢?如果您有一个 Web 应用程序需要处理这么多连接,那将是一件很 “恐怖” 的事!那是一种 “如果您有这个问题,那么它根本不是问题” 的问题。在回答上面的问题之前,我们先看看 Node 的工作原理以及它的设计运行方式。