Ryan dahl对node.js初衷

来源:互联网 发布:为知笔记产品经理 招聘 编辑:程序博客网 时间:2024/04/26 10:34
2008年,我在寻找一个新的编程平台来做网站。我并不是想要一门新的语言,实际上,语言自身的细节对我来说并不重要。我真正关心的是,该语言能否提供先进的推送功能并集成到网站中来,就像我在Gmail中看到的那样——能够从服务器端把数据主动推送给用户,而不是采用不断轮询拉取数据的方式。现有的平台都把服务器作为接受请求然后返回相应内容的设备。要把事件推送到浏览器,平台需要能够持续处理大量打开的网络连接,而这其中有许多连接其实是空闲的。

我知道如何使用系统调用(用C)实现这样的功能。如果只使用非阻塞式socket,每个连接的开销都会非常小。在小规模测试中,我可以演示一台服务器,它能同时处理几千个闲置连接,或实现相当大的吞吐量。我知道这是在Unix服务器上用户空间程序能够实现的最优操作了。但是,我并不想使用C,我需要的是一种漂亮灵活的动态语言。如果需要,我可以在每种编程语言中都用一模一样的系统调用,但这样做异常丑陋,而且这只是socket编程的“替代”方法而已。我认为,非阻塞socket编程并非那么困难,只要一切都做成非阻塞的就可以实现了。

Google在2008年年末推出了Chrome浏览器和崭新的JavaScript引擎V8。这是一个为了更快的Web体验而专门制作的更快的JavaScript引擎,V8让Web应用大大提速了。突然之间,Google、Apple、Mozilla和微软之间的JavaScript军备竞赛就开始了。再加上Doug Crockford的JavaScript: The Good Parts一书的面世,把JavaScript从一门人人轻视的语言一下变成了重要的语言。

于是,我有了个主意:JavaScript结合非阻塞socket!因为JavaScript并没有现成的socket库,所以我可以勇做第一人,来推介这个崭新且大有前途的接口。只要把V8接上我的非阻塞C代码,我就能把它完成。我终止了当时承接的工作,开始全力实现这个想法。当我编写好并发布了最初的版本后,立刻就有用户开始反馈bug,然后我开始不停地处理这些bug,就这样,不知不觉过去了3年。

实践证明,JavaScript与非阻塞socket配合得相当完美。开始我并不敢肯定这一点,但闭包让所有事情变得可能。只需要简单的几行JavaScript代码,就可以构建出非常复杂的非阻塞服务器。我最初还担心,系统会过于小众,但很快我就放心了,因为世界各地的黑客们纷纷开始为其编写程序库。唯一的事件循环队列和纯粹的非阻塞接口让程序库不必增加昂贵的线程,就能添加越来越多的复杂功能。

在Node中,用户会发现系统在默认情况下就能很好地扩展。因为其核心系统做出的选择是,不允许系统中的任何部分做出太坏的事情来(比如堵塞当前线程),所以整体性能也不会太差。如果以能够处理的流量作为计量,Node的方法要比传统的阻塞式操作好上一个数量级。

现在,Node已经在全球被众多公司所使用,包括创业公司、Voxer、Uber,以及沃尔玛、微软这样的知名公司。可以说,每天通过Node处理的请求数以亿计。随着越来越多的人参与到本项目中来,可用的第三方模块和扩展增长迅猛,而且质量也不断提升。虽然我曾建议将Node用于关键任务应用,但现在,即便是要求最苛刻的服务器系统,我也会热诚地推荐使用Node。

本书探讨了Node及许多第三方模块,并给出了指导练习,旨在带你深入浅出地了解Node。通过学习本书,你不但能够熟悉JavaScript的基本操作,还能逐渐开始构建复杂、交互式的网站。如果你曾经使用过其他服务器端Web框架,你会震惊于用Node这么容易就能编写一个服务器!

0 0