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。