酆都三千里:浅析Node.js:一个“编码就绪”服务器

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 18:57:02

浅析Node.js:一个“编码就绪”服务器

2011年06月17日14:50 来源:PHPchina 作者:纳美人 编辑:胡铭娅 评论:0条 本文Tag: javascript 开源

  【IT168 技术】Node是一个服务器端JavaScript解释器,它将改变服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物理机的连接代码。本文探究了Node.js能解决哪些问题,它如何工作,如何运行一个简单应用程序,最后,Node何时是以及何时不是一个好的解决方案。

  Node旨在解决什么问题?

  Node公开宣称的目标是“旨在提供一种简单的构建可伸缩网络程序的方法”。当前的服务器程序有什么问题?我们来做个数学题。在Java和PHP这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB 配套内存。在一个拥有8GB RAM的系统上,理论上最大的并发连接数量是4,000个用户。随着您的客户端基础的增长,您希望您的web应用程序支持更多用户,这样,您必须添加更多服务器。当然,这会增加业务成本,尤其是服务器成本、运输成本和人工成本。除这些成本上升外,还有一个技术问题:用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。例如,在Java中,静态变量和缓存需要在每个服务器上的JVMs之间共享。这就是整个web应用程序架构中的瓶颈:一个服务器能够处理的并发连接的最大数量。

  Node解决这个问题的方法是:更改连接连接到服务器的方式。每个连接都创建一个进程,该进程不需要配套内存块,而不是为每个连接生成一个新的OS线程(并向其分配一些配套内存)。Node声称它绝不会死锁,因为它根本不允许使用锁,它不会直接阻塞I/O调用。Node还宣称,运行它的服务器能支持数万个并发连接。事实上,Node通过将整个系统中的瓶颈从最大连接数量更改到单个系统的流量来改变服务器面貌。

  现在您有了一个能处理数万条并发连接的程序,那么您能通过Node实际构建什么呢?如果您有一个web应用程序需要处理这么多连接,那将是一件很 “恐怖” 的事!那是一种“如果您有这个问题,那么它根本不是问题” 的问题。在回答上面的问题之前,我们先看看Node如何工作以及它被设计的如何运行。

  Node肯定不是什么

  没错,Node是一个服务器程序。但是,它肯定不像Apache或Tomcat。那些服务器是独立服务器产品,可以立即安装并部署应用程序。通过这些产品,您可以在一分钟内启动并运行一个服务器。Node肯定不是这种产品。Apache能添加一个PHP模块来允许开发人员创建动态web页,使用Tomcat的程序员能部署JSPs来创建动态web页。Node肯定不是这种类型。

  在Node的早期阶段(当前是version 0.4.6),它还不是一个“运行就绪”的服务器程序,您还不能安装它,向其中放置文件,拥有一个功能齐全的web服务器。即使是要实现web服务器在安装完成后启动并运行这个基本功能,也还需要做大量工作。

  Node如何工作

  Node本身运行V8 JavaScript。等等,服务器上的JavaScript?没错,您没有看错。服务器端JavaScript 是一个相对较新的概念,这个概念是大约两年前在developerWorks上讨论Aptana Jaxer产品时提到的(参见参考资料)。尽管Jaxer一直没有真正流行,但这个理念本身并不是遥不可及的 — 为何不能在服务器上使用客户机上使用的编程语言?

  什么使 V8?V8 JavaScript引擎是Google用于他们的Chrome浏览器的底层JavaScript引擎。很少有人考虑JavaScript在客户机上实际做了些什么?实际上,JavaScript引擎负责解释并执行代码。使用V8,Google创建了一个以C++编写的超快解释器,该解释器拥有另一个独特特征;您可以下载该引擎并将其嵌入任何 应用程序。它不仅限于在一个浏览器中运行。因此,Node实际上使用Google编写的V8 JavaScript引擎并将其重建为在服务器上使用。太完美了!既然已经有一个不错的解决方案可用,为何还要创建一种新语言呢?

  Node对什么有好处?

  到此为止,应该能够回答“Node是什么” 这个问题了,但您可能还不清楚什么时候应该使用它。这是一个需要提出的重要问题,因为Node对有一些东西有好处,但相反,对另一些东西而言,目前Node可能不是一个好的解决方案。您需要小心决定何时使用Node,因为在错误的情况下使用它可能会导致一个多余编码的 LOT。

  正如您此前所看到的,Node非常适合以下情况:您预计可能有很高的流量,而在响应客户端之前服务器端逻辑和处理所需不一定是巨大的。Node表现出众的典型示例包括:

  RESTful API

  提供RESTful API的web服务接收几个参数,解析它们,组合一个响应,并返回一个响应(通常是较少的文本)给用户。这是适合Node的理想情况,因为您可以构建它来处理数万条连接。它还不需要大量逻辑;它只是从一个数据库查找一些值并组合一个响应。由于响应是少量文本,入站请求时少量文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的API需求。