v8cgi 内建就有提供 socket 的 c 语言程式码,虽然 google 都已经提拱 SContruct 的方式给我们自已编译,可是我还是希望 v8cgi 可以像 php 一样,我可以自已选择要编译的 extension ,并自已管理相关的 extension,在开始看这篇文章之前,你或许要参考我上一篇写的「v8cgi 安装」。
在上一篇文章中,我在安装 v8cgi 时,刻意使用最简易安装,也就是非必要的 extension ,我都不装,而这篇文章,就是为了说明如何编译 v8cgi extension。
- v8cgi svn : http://v8cgi.googlecode.com/svn/trunk
编译 v8cgi socket
找一个 v8cgi 内建有的程式来试编译 extension , 在下载回来的 svn trunk 中,路径 「trunk/src/lib/socket」 可以找到 socket 的程式码,编译方式,与编译 php extension 的方式大同小异,首先先将程式编译成 .o 档,然后再将 .o link 其他相关的 library ,变成 .so 档。
编译前,记得先参考上一篇文章,将内建的 library 先编译过,这样在 truck/src/ 的资料夹里会看到,path.os、system.os 、 app.os 、 cache.os common.os 、 gc.os 、 bytestorage.os 等等, socket 会用到的 library 有 path.os 、 app.os 、 cache.os,common.os,bytestorage.os 这一些。
正式开始编译 v8cgi extension 的 socket 吧,首先进入 src/lib/socket/ 的目录然后输入下列的编译指令。
顺利的建好 socket.o 之后,接著要将必要的 library link 起来,输入指令如下, v8 与 pthread 是必备一定要的 lib , pthread 是编程相关的 library,v8 是 v8 engine library ,而其他的 connon, app ,path,bytestorage 等则是 v8cgi 相关的 library。
最后会编译成 socket.so 再将这个 socket extension 搬到指令的目录即可。
Socket ClientRequest
ClientRequest 就像 php 的 curl 一样,可以取得某个 url 的 html 资料,这个 class 内建必须要有 socket extension的支援,才能运作,刚刚我已经建立好 socket extension了,所以我写一段简单的 javascript 来测试 socket 是否能正常的运作。
- http_request.sjs
- var http = require("http");
- var client = new http.ClientRequest("http://www.yahoo.com.tw/");
- var response = client.send(true);
- system.stdout(JSON.stringify(response.headers(), false, " "));
- system.stdout(response.data.toString("utf-8"));
- v8cgi http_request.sjs : 执行这个指令后,会印出网页的全部 html code 与 header。