用则更大,看 下面的代码示例: var hostRequest http.requestrequestOptionsfunctionresponse var responseHTML response.ondata function chunk responseHTML responseHTML chunk response.onendfunction console.logresponseHTML // do something useful 在上面的代码中,我们需要在 end 事件中处理 responseHTML 变量,由于 Javascript 的 闭包特性,我们可以在两个回调函数之外定义 responseHTML 变量,然后在 data 事件对 应的回调函数中不断修改其值,并最终在 end 事件中访问处理。
3. Javascript 在动态语言中性能较好,有开发人员对 Javacript、Python、Ruby 等动态语言 做了性能分析,发现 Javascript 的性能要好于其他语言,再加上 V8 引擎也是同类的佼 佼者,所以 Node.js 的性能也受益其中。
Node.js 发展简史2009 年 2 月,Ryan Dahl 在博客上宣布准备基于 V8 创建一个轻量级的 Web 服务器并提供一套库。
2009 年 5 月,Ryan Dahl 在 GitHub 上发布了最初版本的部分 Node.js 包,随后几个月里,有人开始使用 Node.js 开发应用。
2009 年 11 月和 2010 年 4 月,两届 JSConf 大会都安排了 Node.js 的讲座。
2010 年年底,Node.js 获得云计算服务商 Joyent 资助,创始人 Ryan Dahl 加入 Joyent 全职负责Node.js 的发展。
2011 年 7 月,Node.js 在微软的支持下发布 Windows 版本。
Node.js 应用案例虽然 Node.js 诞生刚刚两年多,但是其发展势头逐渐赶超 Ruby/Rails,我们在这里列举了部分企业应用 Node.js 的案例,听听来自客户的声音。
在社交网站 LinkedIn 最新发布的移动应用中,NodeJS 是该移动应用的后台基础。
LinkedIn 移动开发主管 Kiran Prasad 对媒体表示,其整个移动软件平台都由 NodeJS 构建而成:LinkedIn 内部使用了大量的技术,但是在移动服务器这一块,我们完全基于 Node。
(使用它的原因)第一,是因为其灵活性。
第二,如果你了解 Node,就会发现它最擅长的事情是与其他服务通信。
移动应用必须与我们的平台 API 和数据库交互。
我们没有做太多数据分析。
相比之前采用的 Ruby on Rails 技术,开发团队发现 Node 在性能方面提高很多。
他们在每台物理机上跑了 15 个虚拟服务器(15 个实例),其中 4 个实例即可处理双倍流量。
容量评估基于负载测试的结果。
企业社会化服务网站 Yammer 则利用 Node 创建了针对其自身平台的跨域代理服务器,第三方的开发人员可以通过该服务器实现从自身域托管的 Javascript 代码与 Yammer 平台 API 的 AJAX 通信。
Yammer 平台技术主管 Jim Patterson 对 Node 的优点和缺点提出了自己的看法:(优点)因为 Node 是基于事件驱动和无阻塞的,所以非常适合处理并发请求,因此构建在 Node上的代理服务器相比其他技术实现(如 Ruby)的服务器表现要好得多。
此外,与 Node 代理服务器交互的客户端代码是由 javascript 语言编写的, 因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。
(缺点)Node 是一个相对新的开源项目,所以不太稳定,它总是一直在变,而且缺少足够多的第三方库支持。
看起来,就像是 Ruby/Rails 当年的样子。
知名项目托管网站 GitHub 也尝试了 Node 应用。
该 Node 应用称为 NodeLoad,是一个存档下载服务器(每当你下载某个存储分支的 tarball 或者 zip 文件时就会用到它)。
GitHub 之前的存档下载服务器采用 Ruby 编写。
在旧系统中,下载存档的请求会创建一个 Resque 任务。
该任务实际上在存档服务器上运行一个 git archive 命令,从某个文件服务器中取出数据。
然后,初始的请求分配给你一个小型 Ruby Sinatra 应用等待该任务。
它其实只是在检查 memcache flag 是否存在,然后再重定向到最终的下载地址上。
旧系统运行大约 3 个 Sinatra 实例和 3 个 Resqueworker。
GitHub 的开发人员觉得这是 Node 应用的好机会。
Node 基于事件驱动,相比 Ruby 的阻塞模型,Node 能够更好地处理 git 存档。
在编写新下载服务器过程中,开发人员觉得 Node非常适合该功能,此外,他们还里利用了 Node 库 socket.io 来监控下载状态。
不仅在国外,Node 的优点也同样吸引了国内开发人员的注意,淘宝就实际应用了 Node 技术:MyFOX 是一个数据处理中间件,负责从一个 MySQL 集群中提取数据、计算并输出统计结果。
用户提交一段 SQL 语句,MyFOX 根据该 SQL 命令的语义,生成各个数据库分片所需要执行的查询语句,并发送至各个分片,再将结果进行汇总和计算。
MyFOX 的特点是 CPU 密集,无文件IO,并只处理只读数据。
起初 MyFOX 使用
PHP 编写,但遇到许多问题。
例如
PHP 是单线程的,MySQL 又需要阻塞查询,因此很难并发请求数据,后来的解决方案是使用 nginx 和 dirzzle,并基于 HTTP 协议实现接口,并通过 curl_multi_get 命 令进行请求。
不过 MyFOX 项目组最终还是决定使用 Node.js 来实现 MyFOX。
选择 Node.js 有许多方面的原因,比如考虑了兴趣及社区发展,同时也希望可以提高并发能力,榨干 CPU。
例如,频繁地打开和关闭连接会让大量端口处于等待状态,当并发数量上去之后,时常会因为端口不够用(处于 TIME_WAIT 状态)而导致连接失败。
之前往往是通过修改系统设置来减少等待时间以绕开这个错误,然而使用连接池便可以很好地解决这个问题。
此外,以前MyFOX 会在某些缓存失效的情况下出现十分密集的访问压力,使用 Node.js 便可以共享查询状态,让某些请求“等待片刻”,以便系统重新填充缓存内容。
Node.jsampNPM 的安装与配置Node.js 安装与配置Node.js 已经诞生两年有余,由于一直处于快速开发中,过去的一些安装配置介绍多数针对 0.4.x 版本而言的,并非适合最新的 0.6.x 的版本情况了,对此,我们将在 0.6.x 的版本上介绍 Node.js 的安装和配置。
(本文一律以 0.6.1 为例,0.6 的其余版本,只需替换版本号即可。
从 http://nodejs.org/download 可以查看到最新的二进制版本和源代码)。
Windows 平台下的Node.js 安装在过去,Node.js 一直不支持在 Windows 平台下原生编译,需要借助 Cygwin 或 MinGW 来模拟 POSIX 系统,才能编译安装。
幸运的是 2011 年 6 月微软开始与 Joyent 合作移植 Node.js 到 Windows 平台上(http://www.infoq.com/cn/news/2011/06/node-exe ),这次合作的成果最终呈现在 0.6.x 的稳定版的发布上。
这次的版本发布使得 Node.js 在 Windows 平台上的性能大幅度提高,使用方面也更容易和轻巧,完全摆脱掉 Cygwin 或 MinGW 等实验室式的环境,并且在某些细节方面,表现出比 Linux 下更高的性能,细节参见 http://www.infoq.com/news/2011/11/Nodejs-Windows。
在 Windows(Windows7)平台下,我将介绍二种安装 Node.js 的方法,即普通和文艺安装方法。
普通的安装方法普通安装方法其实就是最简单的方法了,对于大多 Windows 用户而言,都是不太喜欢折腾的人,你可以从这里(http://nodejs.org/dist/v0.6.1/node-v0.6.1.msi )直接下载到 Node.js 编译好的 msi 文件。
然后双击即可在程序的引导下完成安装。
在命令行中直接运行:node -v命令行将打印出:v0.6.1该引导步骤会将 node.exe 文件安装到 C:Program Files x86nodejs目录下,并将该目录添加进 PATH 环境变量。
文艺的安装方法Windows 平台下的文艺安装方法主要提供给那些热爱折腾,喜欢编译的同学们。
在编译
源码之前需要注意 Node.js 的
源码主要由 C代码和 JavaScript 代码构成,的是你的 Windows 系统是否包含编译
源码的工具。
但是却用 gyp 工具(http://code.google.com/p/gyp/ )来做
源码的项目管理,该工具采用 Python 语言写成的。
在 Windows 平台上,Node.js 采用 gyp 来生成 Visual Studio Solution 文件,最终通过 VC的编译器将其编译为二进制文件。
所以,你需要满足以下两个条件: 1. Python(Node.js 建议使用 2.6 或更高版本,不推荐 3.0),可以从这里(http://python.org/)获 取。
2. VC 编译器,包含在 Visual Studio 2010 中(VC 2010 Express 亦可),VS2010 可以从这里 (http://msdn.microsoft.com/en-us/vstudio/hh388567)找到。
下载 Node.js 的 0.6.1 版本的
源码压缩包(http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gz )并解压之。
通过命令行进入解压的
源码目录,执行 vcbuild.bat release 命令,然后经历了漫长的等待后,编译完成后,在 Release 目录下可以找到编译好的 node.exe 文件。
通过命令行执行 node -v。
命令行返回结果为:v0.6.1事实上,如果你的编译环境中存在 WiX 工具集(http://wix.sourceforge.net/ ) 执行 vcbuild.bat msi release ,命令,你将会在 Relase 目录下找到 node.msi。
是的,我们回到了一开始的普通安装方法。
所谓文艺就是多走一些路,多看一些风景罢了。
Unix/Linux 平台下的Node.js 安装由于 Node.js 尚处于 v0.x.x 的版本的快速发展中,Unix/Linux 平台的发行版都不会预置 Node 的二进制文件,通过
源码进行编译安装是目前最好的选择。
而且用 Unix/Linux 系统的同学们多数都是文艺程序员,本节只介绍如何通过
源码进行编译和安装。
安装条件如同在 Windows 平台下一样,Node.js 依然是采用 gyp 工具管理生成项目的,不同的是通过 make 工具进行最终的编译。
所以 Unix/Linux 平台下你需要以下几个必备条件,才能确保编译完成: 1. Python。
用于 gyp,可以通过在 shell 下执行 python 命令,查看是否已安装 python,并确认版本 是否符合需求(2.6 或更高版本,但不推荐 3.0)。
2. 源代码编译器,通常 Unix/Linux 平台都自带了 C的编译器(GCC/G)。
如果没有,请通过当 前发行版的软件包安装工具安装 make,g这些编译工具。
a. Debian/Ubuntu 下的工具是 apt-get b. RedHat/centOS 下通过 yum 命令 c. Mac OS X 下你可能需要安装 xcode 来获得编译器 相关厂商内容 Scala,让Java平台上的编程重现生机 3. 其次,如果你计划在 Node.js 中启用网络加密,OpenSSL 的加密库也是必须的。
该加密库是 libssl-dev,可以通过 apt-get install libssl-dev 等命令安装。
检查环境并安装完成以上预备条件后,我们获取
源码并进行环境检查吧:wget http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gztar zxvf node-v0.6.1.tar.gzcd node-v0.6.1./configure上面几行命令是通过 wget 命令下载最新版本的代码,并解压之。
./configure 命令将会检查环境是否符合 Nodejs的编译需要。
Checking for program g or c : /usr/bin/gChecking for program cpp : /usr/bin/cppChecking for program ar : /usr/bin/arChecking for program ranlib : /usr/bin/ranlibChecking for g : okChecking for program gcc or cc : /usr/bin/gccChecking for program ar : /usr/bin/arChecking for program ranlib : /usr/bin/ranlibChecking for gcc : okChecking for library dl : yesChecking for openssl : yesChecking for library util : yesChecking for library rt : yesChecking for fdatasync2 with c : yesconfigure finished successfully 7.350s如果检查没有通过,请确认上面提到的三个条件是否满足。
如果 configure 命令执行成功,就可以进行编译了:makemake installNodejs 通过 make 工具进行编译和安装(如果 make install 不成功,请使用 sudo 以确保拥有权限)。
完成以上两步后,检查一下是否安装成功:node -v检查是否返回:v0.6.1至此,Nodejs 已经编译并安装完成。
如需卸载,可以执行 make uninstall 进行卸载。
小结以上介绍了nix 和 Windows 平台下 Nodejs 的安装,之后可以如同 Nodejs 官方网站上介绍的那样,编写example.js 文件。
var http requirehttphttp.createServerfunction req res res.writeHead200 Content-Type: text/plain res.endHello Worldn.listen1337 quot127.0.0.1quotconsole.logServer running at http://127.0.0.1:1337/在命令行中执行它:node example.js你就可以通过浏览器访问 http://127.0.0.1:1337 得到 Hello World 的响应。
安装 NPMNPM 的全称是 Node Package Manager,如果你熟悉 ruby 的 gem,Python 的 PyPL、setuptools,
PHP 的pear,那么你就知道 NPM 的作用是什么了。
没错,它就是 Nodejs 的包管理器。
Nodejs 自身提供了基本的模块。
但是在这些基本模块上开发实际应用需要较多的工作。
所幸的是笔者执笔此文的时候 NPM 上已经有了 5112 个 Nodejs 库或框架,这些库从各个方面可以帮助 Nodejs 的开发者完成较为复杂的应用。
这些库的数量和活跃也从侧面反映出 Nodejs 社区的发展是十分神速和活跃的。
下面我将介绍安装 NPM 和通过 NPM安装 Nodejs 的第三方库,以及在大陆的网络环境下,如何更好的利用 NPM。
Unix/Linux 下安装NPM就像 NPM 的官网(http://npmjs.org/)上介绍的那样,安装 NPM 仅仅是一行命令的.
上一篇:
QT中文_乱码解决
下一篇:
那些令你为之触动的好句子,感慨万分