使用Erlang来创建一个Web服务。
从简单的echo service开始:当访问该服务时,返回服务器端当前的系统时间。
-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()),
gen_tcp:close(Conn).
response() ->
{{Y, M, D}, {H, I, S}} = calendar:local_time(),
B = iolist_to_binary(lists:concat([Y, "-", M, "-", D, " ", H, ":", I, ":", S])),
iolist_to_binary(io_lib:fwrite("HTTP/1.0 200 OK\nContent-Type: text/html\nContent-Length: ~p\n\n~s", [size(B), B])).
编译和启动服务:
1>C(hello).
2>hello:start(1234).
然后可以通过如下网址访问:
当然,为了简洁,我们还可以适当的改写response方法如下:
response() ->
{{Y, M, D}, {H, I, S}} = calendar:local_time(),
iolist_to_binary(io_lib:format("~p-~p-~p ~p:~p:~p", [Y, M, D, H, I, S])).