2012
Jul
01

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 功能,将全部的 js extension 都强迫指定不安装,所以增加指令 socket=0, memcached=0 ... ,如果你想要安装这些额外的 js extension ,记得先去安装相关的 header 档。

编译 v8cgi 指令

scons reuse_context=1 socket=0 memcached=0 mysql=0 sqlite=0 fcgi=0 gd=0 module=1 apache_path=/usr/local/include apr_path=/usr/local/include/apr-1/ config_file=/etc/v8cgi.conf

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

  1. system.stdout("this is a test\n");
  2. var data={"type":"js","content":"empty"};
  3. system.stdout(JSON.stringify(data), null, " ");

执行指令: v8cgi test_c.js

Execut Result:

  1. [puritys]test$ v8cgi test2.sjs
  2. this is a test
  3. {"type":"js","content":"empty"}

v8cgi 之 apache conf

这时 apache 还没办法读懂 v8cgi 的档案,我们要先使得 apache 载入 v8cgi module ,另外再指定副档名「sjs (server js)」的档案类型,这里只能加入 AddHandler ,指定 *.sjs 由 v8cgi 来处理即可。

apache conf 修改加入
  • LoadModule v8cgi_module modules/mod_v8cgi.so
  • AddHandler v8cgi-script sjs

最后再重启 apache 。

v8cgi demo : Hello World

这里一样写一段简单的 javascript code ,然后再用 browser 去读取 v8cgi 执行后的结果,一切正常的话网页就会显示出 Hello World 的文字罗。

  1. require("http");
  2. response.write("<h1>Hello World!</h1>");

下一页将说明如何:手动建立 v8cgi extension


回應 (Leave a comment)