转贴一个简单的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了
分享到:
相关推荐
主要介绍了Erlang实现的一个Web服务器代码实例,本文直接给出实现代码,需要的朋友可以参考下
erlang写的一个特别的web服务器 .转载 谢谢
如果您发现自己正在研究Web服务器的实现,那么elli可能适合您。 如果您要构建Web服务而不是网站,那么elli可能适合您。 Elli在Wooga和Game Analytics中用于生产。 Elli需要OTP 18.0或更高版本。安装要使用elli您...
ChicagoBoss, Erlang web MVC,现在有Comet 芝加哥老板:开始小,梦想大 注意这是一个支持 Erlang 18的主分支。 对于旧的Erlang版本使用遗留分支。芝加哥老板是一个由 Rails 启发并用Erlang编写的服务器框架。 它...
使用以下命令设置 Heroku 项目以使用 Erlang buildpack: heroku config:add BUILDPACK_URL=" " -a twilio-sms-web 带有 Curl 的 POST 示例: curl -X POST ' ' -d 'Body=SMS_message_body&From=SMS_sending_...
elli-用于HTTP API的Erlang Web服务器
Erlang Web 是一个基于 HTTP 协议的应用程序框架,使开发人员从实现动态页面中经常使用的行为中解脱出来。
它的主要用途是在其他一些现有的传输库之上,例如牛仔Web服务器。 当请求到达时,它可以由GraphQL支持库处理,并且可以给出GraphQL答案。 在某种程度上,这将所有REST端点替换为一个端点:一个用于Graph Queries。 ...
Erlang不但是一种编程语言,而且它具有比编程语言更加贴近操作系统的一些特性:并发线程、作业调度、内存管理、分布式、网络化等。据说使用Erlang编写的Yaws Web服务器,其并发性能是apache的15倍!
这是Yaws,是用Erlang编写的动态内容的Web服务器。 准备构建 获取并安装一个Erlang系统( )。 要编译Yaws,需要Erlang / OTP 18.0或更高版本。 如果您已经从github克隆了源代码,并且想使用自动工具进行构建,请...
使用稳定,快速的Erlang后端以及易于使用JavaScript库,创建您自己的Web聊天界面。 例子 /basic/index.html有一个示例界面,但是它不能在所有浏览器中都起作用,也不是很好。 用法 开始 加载依赖项并使用rebar get-...
SimpleBridge用作两个最受欢迎的Erlang Web框架到Web服务器的桥梁: 和 从某种意义上讲,它类似于 ,除了具有一些关键的改进/不同之处: 轻松扩展-需要200到400行,以增加对新HTTP服务器的支持,包括网桥模块本身...
Erlang.org使用来提供Web服务器支持,并使用来呈现Web页面。 它使用连接到PostgreSQL数据库。 使用docker设置Erlang.org 跑步: 码头工人组成 然后连接到并享受。 Erlang / OTP 使用Erlang / OTP 18.3。 请按照...
最小牛仔这是将Cowboy-Web服务器集成到erlang / otp应用程序堆栈中的最小示例。 构建系统基于GNU / make和钢筋。 通过以下方式解决牛仔的依赖关系: make deps使用以下命令构建并启动该应用程序: make buildmake ...
很棒的精选的Erlang框架,库和软件的精选列表。 -Erlang / OTP -EMQ X Broker-5G时代用于物联网的可... -Lisp风味Erlang(LFE) -Erlang Web MVC,现在具有Comet功能 -MochiWeb是用于构建轻量级HTTP服务器的Erlang库。
#一个小型网络服务器 ##这是什么? 这是一个在 Erlang 中创建一个小型且受限的网络服务器的学校项目。 ##作者金哈马尔 皇家理工学院 斯德哥尔摩
Weby Gleam基本Web服务器 快速开始 克隆存储库并CD进入其中。 跑步: # Run the Erlang REPL rebar3 shell 造访
webdrv - Erlang 中的 WebDriver 实现 ... WebDriver API 目前正在由 W3C 标准化(撰写本文时的最新工作草案是从 2013 年 5 月 30 日开始的),但是 WebDriver 服务器端的主要实现者(如 Selenium 和 ChromeDr
所有消息都使用二进制(端到端)[Erlang 外部术语格式的 Javascript 实现] ( ) 在客户端/服务器之间交换。 得到 $ git clone https://github.com/saleyn/erws_example.git 建造 初始构建: $ make deps 连续构建...
用于Erlang Web服务器的插头适配器。 安装 您可以通过添加依赖plug_cowboy在项目中使用plug_cowboy : def deps do [ { :plug_cowboy , " ~> 2.0 " }, ] end 然后,您可以使用以下命令启动适配器: Plug . ...