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

腳本之家,腳本語言編程技術(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久久免费国产香蕉麻豆 | a黄毛片 | 火影小南被爆羞羞网站进入 | 亚洲精品卡1卡二卡3卡四卡 | 亚洲天堂视频在线免费观看 | 男同桌扒开女同桌胸罩喝奶 | 日本在线www| 特级毛片免费视频观看 | 日本视频免费看 | 好吊妞视频998www | 久久久黄色片 | 天美传媒影视在线免费观看 | 成人免费在线视频网 | 草莓视频首页 | 国产精品午夜国产小视频 | 日韩丝袜在线观看 | 午夜国产 | 嘉嘉的丝袜美腿白丝 | 日本xnxnxnxnxn护士 | 性姿势女人嗷嗷叫图片 | 亚洲精选在线观看 | 国产高清国内精品福利 | 日日爽日日操 | 男人捅女人的鸡鸡 | 国产精品久久久久久爽爽爽 | 日韩永久在线观看免费视频 | 欧美一级视频免费观看 | 无限观看社区在线视频 | 好大好爽好硬 | 男人天堂视频网 | 免费观看欧美成人禁片 | 美女被绑着吸下部的故事 | 大好硬好深好爽想要视频 | 精品在线看 |