node.js 最近很热门,大家都知道它能够让工程师在制作网站时,前后端皆使用 javascript 来写程式,但是 node.js 必须自行实作 apache 的每一样功能,这对於开发一个大型的 web server 是非常的不利,会导致开发时间过长,以及web server 实作功能不完全。
v8cgi 就如同 php 一样,可以搭配 apache 来开发网站,所以 apache 的 rewrite , htaccess , allow access 等等就不须要再重新实作一次,我们只要专注於开发网站即可,现在就先来安装 v8cgi。
编译 v8cgi 前置作业
在安装 v8cgi 之前,须必先把 v8 给装起来,v8 的功能主要是能够使用 Linux command line 执行 javascript 语法,并提供基本的 function 来使用,安装方式请参考「 这里 」
另外我要搭配 apache 一起使用,所以也必须安装 apache ,安装方式「这里」
编译与安装 v8cgi
安装好 v8 与 v8 的 library 后,接著要去下载 v8cgi 原始档,再使用 scons方式编译, v8cgi 有提供一些常用的 library 如 mysql , memcache , sqlite, fastcgi,但是下载回来的原始档,并没有包含这些 library 的 header 档,所以如果你有须要这些功能,并且要编译的话,就得先去下载这个 library 的 header 档回来安装,通常是一些档案名称为 mysql-devel 的档案。
- v8cgi 下载点
- 直接下载 : http://code.google.com/p/v8cgi/downloads/detail?name=v8cgi-0.9.3-src.tar.gz&can=2&q=
- 使用 svn 下载 : svn co svn+ssh://v8cgi.googlecode.com/svn/trunk
接著解压缩后,进入资料夹,就开始编译吧,这里只使用最基本的 v8cgi 功能,将全部的 js extension 都强迫指定不安装,所以增加指令 socket=0, memcached=0 ... ,如果你想要安装这些额外的 js extension ,记得先去安装相关的 header 档。
v8cgi 设定档的路径预设是 /etc/v8cgi.conf ,这个档案很像是 php.ini 一样,可以设定一些要载入的 extension ,或是设定某些变数,这个设定档的路径是可以修改的,只要在编译的时候,加入 config_file = /xxx/xxx.conf 。
最后就要将编译好的档案,搬到正确可以执行的目录下
- cp v8cgi /usr/local/bin/
- cp mod_v8cgi.so /$(apache_path)/modules/
- cp v8cgi.conf.posix /etc/v8cgi.conf
- cp lib/* /$(v8cgi_path)/lib/ (路径可以自定,只要修改 v8cgi.conf 的 require.paths.push 相同即可 )
lib/* 这里放的是 v8cgi 最基本的 library ,要全部搬到正确的目录,内容包含 http , request ,response , process 等等。
v8cgi command line
有了 /usr/local/bin/v8cgi 之后,就可以用 command line 的方式执行 javascript 程式了,这里写一段简单的 js 程式来 demo。
File : test_c.js
- system.stdout("this is a test\n");
- var data={"type":"js","content":"empty"};
- system.stdout(JSON.stringify(data), null, " ");
执行指令: v8cgi test_c.js
Execut Result:
- [puritys]test$ v8cgi test2.sjs
- this is a test
- {"type":"js","content":"empty"}
v8cgi 之 apache conf
这时 apache 还没办法读懂 v8cgi 的档案,我们要先使得 apache 载入 v8cgi module ,另外再指定副档名「sjs (server js)」的档案类型,这里只能加入 AddHandler ,指定 *.sjs 由 v8cgi 来处理即可。
最后再重启 apache 。
v8cgi demo : Hello World
这里一样写一段简单的 javascript code ,然后再用 browser 去读取 v8cgi 执行后的结果,一切正常的话网页就会显示出 Hello World 的文字罗。
- require("http");
- response.write("<h1>Hello World!</h1>");
下一页将说明如何:手动建立 v8cgi extension