1、服务器端JavaScript和客户端JavaScriptvar
JavaScript作为一种脚本语言,需要一个宿主环境,而客户端JavaScript的宿主环境就是浏览器,而服务器端JavaScript的宿主环境是服务器。常见的服务器端JavaScript环境有Node.js、Jaxer和Narwhal。
服务器端JavaScript不是个新概念,其实老早就有了,从九六年Netscape普及JavaScript的时候,服务器端和客户端都是考虑到了的,只不过只有客户端健壮发展起来了,服务端的故事直到现在才被慢慢提起。常见的
2、node.js
Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物理机的连接代码。
Node.js和Jaxer、Narwhal不同的地方是,它基于事件模型,而不是线程模 型。例如,支持PHP和其它CGI脚本的web服务器Apache就是基于线程的,它为每一个传入的请求启动一个系统线程。虽然对于许多应用来说这没有问题,但是许多需要长连接请求的应用,如Friendfeed或Google Wave,线程模型并没有很好的扩展性。
Node.js使用事件循环而非线程,这样他能够扩展到数百万的并发连接。它克服如下缺陷,服务器花费其大部分时间用于等待I/O操作,如从硬 读取一个文件,访问一个外部Web服务或等待一个文件上传完毕,因为这些操作对比内存操作来说是非常慢的。每个I/O操作在Node.js都是异步的,也就是说,在I/O操作正在进行的同时,服务器可以继续处理传入的请求。JavaScript非常适合基于事件的编程,因为它的匿名函数和闭包特性使内联回调函数的编写变得异常简单,并且JavaScript开发人员早已熟悉这样的技巧。此事件为基础的模式,使得Node.js速度非凡。并能轻松满足实时应用程序的需求。
3、node.js例子(帮助理解)
3.1、Hello World例子
<pre name="code" class="javascript">var sys = require("sys"); sys.puts("Hello World!");
如上代码,加载sys模块,其中包含处理系统级任务的功能,如输出到终端。要使用一个模块中的一个函数,您必须通过存储模块的变量来调用它,在我们的例子中
sys
就是这个变量。
3.2、创建一个HTTP服务器
- var sys = require("sys"),
- http = require("http");
- http.createServer(function(request, response) {
- response.sendHeader(200, {"Content-Type": "text/html"});
- response.write("Hello World!");
- response.close();
- }).listen(8080);
- sys.puts("Server running at http://localhost:8080/");
sys
和http
模块,并创建了一个HTTP服务器。传递给http.createServer
的匿名函数,将在每请求到来时被调用。服务器被创建之后,它会监听端口8080。当请求到来时,我们首先发送包含内容类型和状态代码200(表示成功)的HTTP协议头。然后,发送“Hello World!”并关闭连接。