Skip to main content

This is my blog, more about me at marianoguerra.github.io

🦋 @marianoguerra.org 🐘 @marianoguerra@hachyderm.io 🐦 @warianoguerra

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.