• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Erlang实现的一个Web服务器代码实例

    转贴一个简单的Web服务器:

    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

    运行时在httpd.erl本地建一个public目录,public目录里放一个index.html文件
    然后httpd:start()启动服务器,就可以访问http://localhost:8888/index.html了

    您可能感兴趣的文章:
    • Go/Python/Erlang编程语言对比分析及示例代码
    • python读取excel表格生成erlang数据
    • Erlang中的Record详解
    • Erlang初学:Erlang的一些特点和个人理解总结
    • CentOS 6.5源码安装Erlang教程
    • ERLANG和PYTHON互通实现过程详解
    上一篇:Erlang中的Record详解
    下一篇:一篇文章带你从入门到精通:RabbitMQ
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Erlang实现的一个Web服务器代码实例 Erlang,实现,的,一个,Web,服务器,