tags:

views:

357

answers:

4

Using the default Erlang installation what is the minimum code needed to produce a "Hello world" producing web server?

+2  A: 

Do you actually want to write a web server in Erlang, or do you want an Erlang web server so that you can create dynamic web content using Erlang?

If the latter, try YAWS. If the former, have a look at the YAWS source code for inspiration

Paul Butcher
I want to make dynamic content, but just wanted to know the bare minimum needed for a web server. I looked at the Yaws source code and my first impression was that alot of code was needed.
Zubair
+5  A: 

For a web server using only the built in libraries check out inets http_server. When in need of some more power but still with simplicity you should check out the mochiweb library. You can google for loads of example code.

Jon Gretar
Thats great, so using INets can I write a single module webserver?
Zubair
+7  A: 

Taking "produce" literally, here is a pretty small one. It doesn't even read the request (but does fork on every request, so it's not as minimal possible).

-module(hello).
-export([start/1]).

start(Port) ->
    spawn(fun () -> {ok, Sock} = gen_tcp:listen(Port, [{active, false}]), 
                    loop(Sock) end).

loop(Sock) ->
    {ok, Conn} = gen_tcp:accept(Sock),
    Handler = spawn(fun () -> handle(Conn) end),
    gen_tcp:controlling_process(Conn, Handler),
    loop(Sock).

handle(Conn) ->
    gen_tcp:send(Conn, response("Hello World")),
    gen_tcp:close(Conn).

response(Str) ->
    B = iolist_to_binary(Str),
    iolist_to_binary(
      io_lib:fwrite(
         "HTTP/1.0 200 OK\nContent-Type: text/html\nContent-Length: ~p\n\n~s",
         [size(B), B])).
Felix Lange
+2  A: 

For a very easy to use webserver for building restful apps or such check out the gen_webserver behaviour: http://github.com/martinjlogan/gen_web_server.

Tristan Sloughter