JavaScript踏入服务器端开发语言队伍
2010-03-18 10:08:14   来源:未知   评论:0 点击:

JavaScript现在已经成了一门可编写出效率极高的、可用于开发产品级web服务器的出色语言。CommonJS和Node让这个成为可能。

JavaScript现在已经成了一门可编写出效率极高的、可用于开发产品级web服务器的出色语言。

你可能会不相信,没关系,我们先来了解一下,什么东西能让这个东西变的这么神奇。
尽管JavaScript已经出现很长一段时间了,运用也很广泛,但它一直只是局限在浏览器的范围内。与此同时,一些框架试图将JavaScript引入到服务器端,这些框架有Aptana Jaxer,(采用了SpiderMonkey的 JavaScript解释器)和Helma(基于Rhino),但自身的不足又制约着它们的普及。直到2009年启动的两个项目让这成为可能:CommonJSNode
       在2009年JavaScript社区就意识到需要作出一些改变了。Kevin Dangoor在他的博客中说,虽然JavaScript是一种很通行的语言,但却没有形成标准的库API,也没有对外部库进行打包和制定统一的调用方法。由于没有通用的API,每个服务端的JavaScript项目不得不各自为政,这不利于跨项目的库和工具形成一个更庞杂的JavaScript生态圈。
       因此Dangoor启动了ServerJS项目。其宗旨是制定一个大型的、可兼容的JavaScript生态圈所需的API。推出一周后内,ServerJS小组就有了224名成员,邮件列表里也有了653条信息。显然,Dangoor已经引起了开发人员的注意。该项目后来改名CommonJS,以更好地反映其团结JavaScript社区、为浏览器端和服务器端制定统一API的这一伟大目标。

       同时,也是在2009年,Ryan Dahl还启动了一个名叫Node的JavaScript全新框架。Node又名Node.js或Nodejs,后面这两个名称更易于搜索。Node包含了Google的V8 解释器,并将其与CommonJS的库文件API捆绑起来,形成了一个可以不依赖浏览器而使用的完整环境。

      在2009年,还有第三件关于JavaScript的事值得引得人们的注意。那就是以JavaScript为议题的会议开始出现。Chris Williams 和 Iterative Designs 创立了JSConf,这是JavaScript开发者的第一个专业会议。
 

Node
Node是一个以事件为基础的框架,并恪守非阻塞API的策略。
在 Java, C#, Perl, Python, Ruby或是 PHP这些语言中,使用多进程或多线程程序是一种更为通行、也更传统的方式。虽然用这些语言也可以实现基于事件的编程,但却不符合这些语言的习惯。(Twisted或Tornado是基于事件的Python框架,Ruby里则有EventMachine)
Node 的目标是提供一个扩展网络编程的一个简易的方法。
我们先来看看Node 的两个例子:
Example 1:这个例子是在Web服务器等待2秒之后响应输出 “Hello world”的例子

 var sys = require('sys'),
http = require('http');
http.createServer(function (req, res) {
setTimeout(function () {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('Hello World');
res.close();
}, 2000);
}).listen(8000);
sys.puts('Server running at http://127.0.0.1:8000/');

把代码放到 example.js 里,然后再服务器用来运行这个Node下的JS程序
% node example.js
Server running at http://127.0.0.1:8000/

Example 2:这个例子是一个简单的TCP服务器,主要是监听7000端口,然后输出发送过来数据

 var tcp = require('tcp');
var server = tcp.createServer(function (socket) {
socket.setEncoding("utf8");
socket.addListener("connect", function () {
socket.write("hello\r\n");
});
socket.addListener("data", function (data) {
socket.write(data);
});
socket.addListener("end", function () {
socket.write("goodbye\r\n");
socket.close();
});
});
server.listen(7000, "localhost");

 在上面的例子中,两个秒钟的延迟不会阻止从服务器处理的新要求。Node告诉操作系统(通过epoll的,kqueue,/开发/调查,或选择),当通知超过2秒或者有一个新的连接时,则进入睡眠状态。如果有人新的连接,然后它执行的回调,如果超时过期,它执行的内部回调。每个连接,只是一个很小的堆分配。

这个是当前操作系统比较常用的并发模型。基于线程的网络效率相对低下,比较难使用。Node将展示在高比分配2MB的系统,为每个连接线程堆栈负载更好的内存效率。Node 的用户是自由的,不用担心死锁的,Node几乎不直接执行I/O,所以这个进程不会被阻塞,因为没有块,方便程序员快速的开发系统。

Node类似于Ruby事件机或Python的 Twisted,并受它们的影响。

相关热词搜索:Javascript 开发语言 页面脚本 node.js c

上一篇:IE6退出仪式
下一篇:网速成为Google网站排名的因素

分享到: 收藏
评论排行