最近~才剛剛開始接觸Erlang(二郎註1),覺得這functional programming很好玩,所以~特地到圖書館去把Erlang程式設計這本書借回家好好研究,之前~很可惜都與它差插擦身而過好次,只怪相見恨晚:-( 雖然~整本還沒讀完,就開始在東搞西弄的...
- 自己試著用OTP來玩玩看Web Server
依HTTP Server和Erlang Intes這兩篇內容,在按自己的需求來設定…很容易就可以產生一個陽春型Web Server。我參考lib\inets-5.5\examples\server_root\conf下幾個conf檔,隨手抓幾個必要設定來寫成自己的conf。
myserver.conf
Port 8089
ServerName DonaldIsFreak
ServerRoot /tmp
DocumentRoot /tmp
BindAddress localhost
#為這後面esi功能鋪的梗
ErlScriptAlias /erl test_esi io
#等等要試試esi的功能
Modules mod_alias mod_auth mod_esi mod_actions mod_cgi mod_responsecontrol mod_trace mod_range mod_head mod_include mod_dir mod_get mod_log mod_disk_log到Document Root隨便丟個測試的index.html,接著在Console mode下erlc testserver.erl來產生testserver.beam檔案。
testserver.erl
-module(testserver).
-export([init/0,start/0,stop/1]).
-define(CONFIG_FILE,'myserver.conf').
init() ->
%開啟HTTP Server
inets:start().
start() ->
%載入之前的設定值
{ok,Pid}=inets:start(httpd,[{file,?CONFIG_FILE}]),
Pid.
stop(Pid) ->
inets:stop(httpd,Pid).再下erl -s testserver init進入erl mode...
%建立Web Server
Pid=testserver:start().這樣就可以進入localhost:8089,看到剛剛丟進去的index.html,不過~我還想再試試看4.5 Dynamic Web Pages提到的Erlang Server Interface (ESI),因為~之前的conf已經偷偷設定ErlangAlias和Modules,我就直接把寫個Erlang檔案來玩(記得先Stop Server)。
test_esi.erl
-module(test_esi).
-export([redirect/2,getname/2]).
redirect(_Env,_Input) ->
"Location: http://donaldknuth.blogspot.com\r\n\r\n".
getname(Env,Input) ->
["Content-type:text/plain\r\n\r\n",
io_lib:format("Enviorment : ~p~n",[Env]),
io_lib:format("Input : ~p~n",[Input]),
io_lib:format("After Parsed : ~p~n",[httpd:parse_query(Input)])
].一樣在Console mode下先erlc testserver.erl,不然~在建立Web Server會出現找不到ErlangAlias所指定的Module,最後~把index.html加入:
<a href='/erl/test_esi:redirect'>Redirect to DonaldIsFreak Blogger</a>
<form action='/erl/test_esi/getname' method='get'>
泥素雖?<input type='text' name='Yourname'/>
<input type='submit' value='讓我來告訴你'/>
</form>可以看到在call Erlang function有兩種URL用法,而我就玩到這為止了!
- 安裝Yaws的Web ServerWeb Server這檔事,還是應該讓專業的Yaws來才對,目前~還在摸索…,想寫寫看用不一樣的思考模式來完成Dynamic Web Content,而Nitrogen提供了很棒的Framework,如果~有時間也想接觸。
好~~那就草率下個結論做Ending...我從Google找到Erlang拿來當Web Server和與Apache拿來比較效能的幾篇文章,暫切不論結果如何,個人覺得能運用Erlang的特性來開發Web Server,實在是一件很酷的事,也想趁著機會好好學習Erlang這奇怪的程式語言:P。
以上是DonaldIsFreak個人想法,如果~有錯誤地方還不吝指教,謝謝!
- 從Yahoo!知識看到Erlang God翻譯成二郎神,覺得有趣就打算直接這樣叫了!
Nitrogen 我在 Windows 上一直弄不起來
回覆刪除下載Nitrogen 2.0.3 for Windows這版本怪怪的,用他包好的boot和erl v5.7.5一樣會有錯誤,後來~我git check out,然後~跑 Quickstart/quickstart.bat就能正常執行了!
回覆刪除