JavaScript是一种运行在浏览器的脚本,它简单,轻巧,易于编辑,这种脚本通常用于浏览器的前端编程。
Node采用一系列“非阻塞”库来支持事件循环的方式。本质上就是为文件系统、数据库之类的资源提供接口。向文件系统发送一个请求时,无需等待硬盘(寻址并检索文件),硬盘准备好的时候非阻塞接口会通知Node。该模型以可扩展的方式简化了对慢资源的访问, 直观,易懂。
实际上,每秒几乎有数千条 tweets 达到,数据库不可能及时处理高峰时段需要的写入数量。node成为这个问题的解决方案的重要一环。如您所见,node能处理数万条入站tweets。它能迅速轻松地将它们写入一个内存排队机制(例如 memcached),另一个单独进程可以从那里将它们写入数据库。node在这里的角色是迅速收集tweet并将这个信息传递给另一个负责写入的进程。想象一下另一种设计 — 一个常规 php 服务器自己试图处理对数据库的写入 — 每个tweet将在写入数据库时导致一个短暂的延迟,这是因为数据库调用正在阻塞通道。由于数据库延迟,一台这样设计的机器每秒可能只能处理2000条入站tweets。每秒100万条tweets需要500个服务器。相反,node能处理每个连接而不会阻塞通道,从而能捕获尽可能多的tweets。一个能处理50,000 条tweets的node机器只需要20个服务器。 映像文件服务器 一个拥有大型分布式网站的公司(比如 facebook 或 flickr)可能会决定将所有机器只用于服务映像。node将是这个问题的一个不错的解决方案,因为该公司能使用它编写一个简单的文件检索器,然后处理数万条连接。node将查找映像文件,返回文件或一个404错误,然后什么也不用做。这种设置将允许这类分布式网站减少它们服务映像、.js和 .css文件等静态文件所需的服务器数量。 它对什么有坏处? 当然,在某些情况下,node并非理想选择。下面是node不擅长的领域: 动态创建的页 目前,node没有提供一种默认方法来创建动态页。例如,使用javaserver pages (jsp) 技术时,可以创建一个在 这样的jsp代码段中包含循环的index.jsp 页。node不支持这类动态的、html驱动的页面。同样,node不太适合作为apache和tomcat这样的网页服务器。因此,如果您想在node中提供这样一个服务器端解决方案,必须自己编写整个解决方案。php程序员不想在每次部署web应用程序时都编写一个针对apache的php转换器,当目前为止,这正是node要求您做的。 关系数据库重型应用程序 node的目的是快速、异步和非阻塞。数据库并不一定分享这些目标。它们是同步和阻塞的,因为读写时对数据库的调用在结果生成之前将一直阻塞通道。因此,一个每个请求都需要大量数据库调用、大量读取、大量写入的web应用程序非常不适合node,这是因为关系数据库本身就能抵销node的众多优势。(新的nosql数据库更适合node,不过那完全是另一个主题了。) 结语 问题是“什么是node.js?” 应该已经得到解答。阅读本文之后,您应该能通过几个清晰简洁的句子回答这个问题。如果这样,那么您已经走到了许多编码员和程序员的前面。我和许多人都谈论过node,但它们对 node究竟是什么一直很迷惑。可以理解,他们具有的是apache的思维方式 — 服务器是一个应用程序,将html文件放入其中,一切就会正常运转。而node是目的驱动的。它是一个软件程序,使用javascript来允许程序员轻松快速地创建快速、可伸缩的web服务器。apache是运行就绪的,而ode是编码就绪的。 node完成了它提供高度可伸缩服务器的目标。它并不分配一个 “每个连接一个线程” 模型,而是使用一个 “每个连接一个流程” 模型,只创建每个连接需要的内存。它使用google的一个非常快速的javascript引擎:v8引擎。它使用一个事件驱动设计来保持代码最小且易于阅读。所有这些因素促成了node的理想目标 — 编写一个高度可伸缩的解决方案变得比较容易。 与理解node是什么同样重要的是,理解它不是什么。node并不是apache的一个替代品,后者旨在使php web应用程序更容易伸缩。事实确实如此。在node的这个初始阶段,大量程序员使用它的可能性不大,但在它能发挥作用的场景中,它的表现非常好。 将来应该期望从node得到什么呢?这也许是本文引出的最重要的问题。既然您知道了它现在的作用,您应该会想知道它下一步将做什么。在接下来的一年中,我期待着node提供与现有的第三方支持库更好地集成。现在,许多第三方程序员已经研发了用于node的插件,包括添加文件服务器支持和mysql支持。希望node开始将它们集成到其核心功能中。最后,我还希望 node支持某种动态页面模块,这样,您就可以在html文件中执行在php和jsp(也许是一个nsp,一个node服务器页)中所做的操作。最后,希望有一天会出现一个 “部署就绪” 的node服务器,可以下载和安装,只需将您的html文件放到其中,就像使用apache或tomcat那样。node现在还处于初始阶段,但它发展得很快,可能不久就会出现在您的视野中。 注:本文内容是根据developerworks作者mike abernethy的文章整理而来的,在michael abernethy的13年技术生涯中,他与各种不同的技术和客户打交道。他目前是一名自由程序员,擅长java高可用性和jquery。他现在专注于富internet 应用程序,试图同时实现应用程序的复杂性和简单性。他空闲时常常去打高尔夫球,更确切地说,是在灌木丛中寻找他打飞的高尔夫球。
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....