激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

服務器之家 - 腳本之家 - Erlang - Erlang實現的一個Web服務器代碼實例

Erlang實現的一個Web服務器代碼實例

2020-05-29 14:04Erlang教程網 Erlang

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

轉貼一個簡單的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("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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产91精品一区二区麻豆亚洲 | 国产1区2区3区中文字幕 | 在线看免费观看av | 国产69精品久久99不卡免费版 | 成年人在线免费播放视频 | 奇米影视奇米色777欧美 | 中文字幕亚洲欧美 | 一级黄色在线观看 | 91看片网页 | 片在线观看| 国产精品久久久久久久成人午夜 | 国语自产免费精品视频在 | 国产做爰全免费的视频黑人 | 久久精品视频1 | 欧美精品一区二区蜜臀亚洲 | 国产一级不卡毛片 | 成人做爰高潮片免费视频韩国 | 亚洲国产一区二区三区 | 国产视频在线免费观看 | 精品一区二区中文字幕 | 91快色| 久久不射电影 | 久久久国产电影 | 国产91丝袜在线熟 | 国产成人av免费看 | 在线亚洲综合 | 特级无码毛片免费视频尤物 | 免看一级片 | 欧美爱爱一区二区 | 久久综合给合久久狠狠狠97色69 | 国产精品久久久久久久四虎电影 | 国产亚洲精品久久久闺蜜 | 91精品国产手机 | 法国性xxx精品hd| 黄网站色成年大片免费高 | 日韩视 | 日本黄网 | 国产99免费| 成人9禁啪啪无遮挡免费 | 高清久久久 | 久久我不卡 |