最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Erlang實(shí)現(xiàn)的一個(gè)Web服務(wù)器代碼實(shí)例

 更新時(shí)間:2015年04月29日 10:27:42   投稿:junjie  
這篇文章主要介紹了Erlang實(shí)現(xiàn)的一個(gè)Web服務(wù)器代碼實(shí)例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下

轉(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

相關(guān)文章

  • Erlang中3種生成隨機(jī)數(shù)的方法

    Erlang中3種生成隨機(jī)數(shù)的方法

    這篇文章主要介紹了Erlang中3種生成隨機(jī)數(shù)的方法,它們分別是random:uniform()、erlang:now()、crypto:strong_rand_bytes(N),需要的朋友可以參考下
    2015-01-01
  • CentOS 6.5源碼安裝Erlang教程

    CentOS 6.5源碼安裝Erlang教程

    這篇文章主要介紹了CentOS 6.5源碼安裝Erlang教程,本文講解了源碼編譯安裝的過程和遇到的一些錯(cuò)誤處理方法,需要的朋友可以參考下
    2015-01-01
  • Erlang中的socket編程簡(jiǎn)單例子

    Erlang中的socket編程簡(jiǎn)單例子

    這篇文章主要介紹了Erlang中的socket編程簡(jiǎn)單例子,本文給出了TCP服務(wù)器echo示例、Tcp 的echo客戶端示例、UDP server示例、UDP client 示例,需要的朋友可以參考下
    2015-03-03
  • Erlang項(xiàng)目?jī)?nèi)存泄漏分析方法

    Erlang項(xiàng)目?jī)?nèi)存泄漏分析方法

    這篇文章主要介紹了Erlang項(xiàng)目?jī)?nèi)存泄漏分析方法,本文講解了分析方法、分析流程并找到問題原因和解決方法,需要的朋友可以參考下
    2015-02-02
  • Erlang的一些編程技巧分享

    Erlang的一些編程技巧分享

    這篇文章主要介紹了Erlang的一些編程技巧分享,本文是是實(shí)際編程中的個(gè)人總結(jié),需要的朋友可以參考下
    2015-01-01
  • Erlang編程語(yǔ)言的第一印象

    Erlang編程語(yǔ)言的第一印象

    這篇文章主要介紹了Erlang編程語(yǔ)言的第一印象,本文對(duì)Erlang做了一個(gè)簡(jiǎn)單總結(jié),需要的朋友可以參考下
    2015-03-03
  • 深入淺析RabbitMQ鏡像集群原理

    深入淺析RabbitMQ鏡像集群原理

    當(dāng)單臺(tái) RabbitMQ 服務(wù)器的處理消息的能力達(dá)到瓶頸時(shí),此時(shí)可以通過 RabbitMQ 集群來(lái)進(jìn)行擴(kuò)展,從而達(dá)到提升吞吐量的目的
    2021-08-08
  • Erlang分布式節(jié)點(diǎn)中的注冊(cè)進(jìn)程使用實(shí)例

    Erlang分布式節(jié)點(diǎn)中的注冊(cè)進(jìn)程使用實(shí)例

    這篇文章主要介紹了Erlang分布式節(jié)點(diǎn)中的注冊(cè)進(jìn)程使用實(shí)例,本文直接給出實(shí)例代碼,需要的朋友可以參考下
    2015-02-02
  • Erlang中的基本元素操作小結(jié)

    Erlang中的基本元素操作小結(jié)

    這篇文章主要介紹了Erlang中的基本元素操作小結(jié),本文講解了元組(tuple)、記錄(record)、列表(list)、映射組(map)等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • 一篇文章帶你從入門到精通:RabbitMQ

    一篇文章帶你從入門到精通:RabbitMQ

    RabbitMQ是實(shí)現(xiàn)了高級(jí)消息隊(duì)列協(xié)議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。RabbitMQ服務(wù)器是用Erlang語(yǔ)言編寫的,所有主要的編程語(yǔ)言均有與代理接口通訊的客戶端庫(kù)
    2021-06-06

最新評(píng)論

定安县| 鸡泽县| 梓潼县| 襄樊市| 东乡| 曲阜市| 腾冲县| 高尔夫| 扎兰屯市| 苍山县| 武城县| 宿迁市| 黑河市| 河池市| 阿拉善左旗| 濮阳市| 桐城市| 大城县| 宜黄县| 芷江| 道真| 宁远县| 普兰县| 陕西省| 闽清县| 昭通市| 吕梁市| 云阳县| 北宁市| 安陆市| 陕西省| 武安市| 政和县| 海晏县| 凤台县| 施甸县| 行唐县| 亳州市| 昌都县| 马边| 和龙市|