轉(zhuǎn)貼一個(gè)簡(jiǎn)單的Web服務(wù)器:
httpd.erl
%% httpd.erl - MicroHttpd -module(httpd). -author("ninhenry@gmail.com"). -export([start/0,start/1,start/2,process/2]). -import(regexp,[split/2]). -define(defPort,8888). -define(docRoot,"public"). start() -> start(?defPort,?docRoot). start(Port) -> start(Port,?docRoot). start(Port,DocRoot) -> case gen_tcp:listen(Port, [binary,{packet, 0},{active, false}]) of {ok, LSock} -> server_loop(LSock,DocRoot); {error, Reason} -> exit({Port,Reason}) end. %% main server loop - wait for next connection, spawn child to process it server_loop(LSock,DocRoot) -> case gen_tcp:accept(LSock) of {ok, Sock} -> spawn(?MODULE,process,[Sock,DocRoot]), server_loop(LSock,DocRoot); {error, Reason} -> exit({accept,Reason}) end. %% process current connection process(Sock,DocRoot) -> Req = do_recv(Sock), {ok,[Cmd|[Name|[Vers|_]]]} = split(Req,"[ \r\n]"), FileName = DocRoot ++ Name, LogReq = Cmd ++ " " ++ Name ++ " " ++ Vers, Resp = case file:read_file(FileName) of {ok, Data} -> io:format("~p ~p ok~n",[LogReq,FileName]), Data; {error, Reason} -> io:format("~p ~p failed ~p~n",[LogReq,FileName,Reason]), error_response(LogReq,file:format_error(Reason)) end, do_send(Sock,Resp), gen_tcp:close(Sock). %% construct HTML for failure message error_response(LogReq,Reason) -> "html>head>title>Request Failed/title>/head>body>\n" ++ "h1>Request Failed/h1>\n" ++ "Your request to " ++ LogReq ++ " failed due to: " ++ Reason ++ "\n/body>/html>\n". %% send a line of text to the socket do_send(Sock,Msg) -> case gen_tcp:send(Sock, Msg) of ok -> ok; {error, Reason} -> exit(Reason) end. %% receive data from the socket do_recv(Sock) -> case gen_tcp:recv(Sock, 0) of {ok, Bin} -> binary_to_list(Bin); {error, closed} -> exit(closed); {error, Reason} -> exit(Reason) end
運(yùn)行時(shí)在httpd.erl本地建一個(gè)public目錄,public目錄里放一個(gè)index.html文件
然后httpd:start()啟動(dòng)服務(wù)器,就可以訪問http://localhost:8888/index.html了
標(biāo)簽:濟(jì)寧 泰安 安徽 廣東 臺(tái)州 武威 汕頭 濟(jì)源
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Erlang實(shí)現(xiàn)的一個(gè)Web服務(wù)器代碼實(shí)例》,本文關(guān)鍵詞 Erlang,實(shí)現(xiàn),的,一個(gè),Web,服務(wù)器,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。