一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Erlang - Erlang實現(xiàn)的一個Web服務器代碼實例

Erlang實現(xiàn)的一個Web服務器代碼實例

2020-05-29 14:04Erlang教程網(wǎng) Erlang

這篇文章主要介紹了Erlang實現(xiàn)的一個Web服務器代碼實例,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下

轉(zhuǎn)貼一個簡單的Web服務器:

httpd.erl

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
%% httpd.erl - MicroHttpd
-module(httpd).
-author("[email protected]").
 
-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

運行時在httpd.erl本地建一個public目錄,public目錄里放一個index.html文件
然后httpd:start()啟動服務器,就可以訪問http://localhost:8888/index.html了

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 乳环贵妇堕落开发调教番号 | 好奇害死猫在线观看 | 久久这里只有精品国产精品99 | 国产suv精品 | 欧美黄站 | 久久毛片网站 | 九九九九九九 | ai换脸明星造梦工厂忘忧草 | 亚洲成熟人网站 | 日韩精选 | 好猛好紧好硬使劲好大刺激视频 | 亚洲大逼 | 青青青久在线视频免费观看 | 1769在线观看 | 男女天堂| 惩罚狠h调教灌满 | 青青国产在线观看 | 91精品国产综合久久福利 | 国内精品久久久久久不卡影院 | 奇米影视欧美 | 免费在线视频观看 | 俄罗斯13一14处出血视频在线 | 美女免费观看一区二区三区 | 国产3级在线 | 丝瓜黄瓜茄子西红柿秋葵榴莲 | 亚洲国产综合久久久无码色伦 | 波多野结衣不卡 | 男人好大好硬好爽免费视频 | 摸咪网在线影院在线观看 | 成品人视频免费观看 | 3d动漫h在线观看网站蜜芽 | 亚洲邪恶天堂影院在线观看 | yy6080午夜国产免费福利 | 日本一卡二卡3卡四卡网站精品 | 歪歪视频在线播放无遮挡 | 亚洲国产精品久久丫 | 2012中文字幕中字视频 | 亚洲第一网色综合久久 | 精品国产mmd在线观看 | 男人天堂网址 | 小鸟酱视频在线观看 |