hola mundo web con mochiweb y simplebridge
a falta de buenos ejemplos de como hacer un hola mundo web en erlang hago uno yo aca
para el ejemplo vamos a usar mochiweb y simplebridge
de sus paginas, saco lo siguiente
mochiweb:
MochiWeb is an Erlang library for building lightweight HTTP servers.
simplebridge:
SimpleBridge takes the pain out of coding to multiple Erlang HTTP servers by creating a standardized interface. It currently supports Mochiweb, Inets, and Misultin, with Yaws coming soon.
para usarlos tenemos que tener ambos instalados, asi que empezemos por bajarlos y compilarlos
# creemos una carpeta
mkdir erlweb
cd erlweb
# descargamos simplebridge
git clone http://github.com/rklophaus/SimpleBridge.git
# lo compilamos
cd SimpleBridge/
make
# volvemos a la base
cd ..
# descargamos mochiweb
svn checkout http://mochiweb.googlecode.com/svn/trunk/ mochiweb
# lo compilamos
cd mochiweb/
make
# volvemos a la base
cd ..
bueno, ya tenemos los componentes necesarios, vamos con el ejemplo, crea un archivo hello.erl y pega el siguiente codigo:
-module(hello).
-export([start/0, loop/1]).
start() ->
Options = [{ip, "127.0.0.1"}, {port, 8000}],
Loop = fun loop/1,
mochiweb_http:start([{name, mochiweb_example_app}, {loop, Loop} | Options]).
response(Req, Root) ->
simple_bridge:make_response(mochiweb_response_bridge, {Req, Root}).
response_ok(Req, Root, ContentType, Data) ->
Response = response(Req, Root),
Response1 = Response:status_code(200),
Response2 = Response1:header("Content-Type", ContentType),
Response3 = Response2:data(Data),
Response3:build_response().
loop(Req) ->
HTML = ["<h1>Hello, World!</h1>"],
response_ok(Req, "./wwwroot", "text/html", HTML).
ahora abrimos una consola interactiva incluyendo en el path los modulos que vamos a usar (mochiweb y simplebridge)
erl -pa ./mochiweb/ebin/ -pa ./SimpleBridge/ebin/
en la consola:
Eshell V5.7.4 (abort with ^G)
1> c(hello).
{ok,hello}
2> hello:start().
{ok,}
abrimos nuestro navegador apuntando a http://localhost:8000/ y deberiamos ver nuestro hola mundo
obviamente que te voy a dar la version en efene ;) pero esta ves en ifene (la diferencia es que ifene define bloques por indentacion en lugar de llaves)
@public
start = fn ()
Options = [(ip, "127.0.0.1"), (port, 8000)]
Loop = fn loop:1
mochiweb_http.start([(name, mochiweb_example_app), (loop, Loop) : Options])
response = fn (Req, Root)
simple_bridge.make_response(mochiweb_response_bridge, (Req, Root))
response_ok = fn (Req, Root, ContentType, Data)
Response = response(Req, Root)
Response1 = Response.status_code(200)
Response2 = Response1.header("Content-Type", ContentType)
Response3 = Response2.data(Data)
Response3.build_response()
@public
loop = fn (Req)
HTML = ["<h1>Hello, World!</h1>"]
response_ok(Req, "./wwwroot", "text/html", HTML)
lo guardamos en hello.ifn y lo compilamos
fnc hello.ifn
lo ejecutamos desde la consola de erlang (mas facil ;)
erl -pa ./mochiweb/ebin/ -pa ./SimpleBridge/ebin/
en la consola:
Eshell V5.7.4 (abort with ^G)
1> hello:start().
{ok,}
deberiamos obtener el mismo resultado.