Erlang - programowanie internetowe
W Erlang inets libraryjest dostępny do budowy serwerów WWW w Erlang. Przyjrzyjmy się niektórym funkcjom dostępnym w programie Erlang do programowania internetowego. Do obsługi żądań HTTP można zaimplementować serwer HTTP, zwany także httpd.
Serwer implementuje wiele funkcji, takich jak -
- Secure Sockets Layer (SSL)
- Interfejs skryptowy Erlang (ESI)
- Interfejs Common Gateway (CGI)
- Uwierzytelnianie użytkownika (przy użyciu Mnesia, Dets lub bazy danych zwykłego tekstu)
- Common Logfile Format (z obsługą disk_log (3) lub bez)
- Aliasing URL
- Mapowania akcji
- Wykaz katalogów
Pierwszym zadaniem jest uruchomienie biblioteki internetowej za pomocą polecenia.
inets:start()
Następnym krokiem jest zaimplementowanie funkcji start biblioteki inets, aby można było zaimplementować serwer WWW.
Poniżej znajduje się przykład tworzenia procesu serwera WWW w Erlang.
Na przykład
-module(helloworld).
-export([start/0]).
start() ->
inets:start(),
Pid = inets:start(httpd, [{port, 8081}, {server_name,"httpd_test"},
{server_root,"D://tmp"},{document_root,"D://tmp/htdocs"},
{bind_address, "localhost"}]), io:fwrite("~p",[Pid]).
Na temat powyższego programu należy zwrócić uwagę na następujące punkty.
Numer portu musi być unikalny i nieużywany przez żaden inny program. Plikhttpd service zostałby uruchomiony na tym porcie nr.
Plik server_root i document_root to parametry obowiązkowe.
Wynik
Poniżej znajduje się wynik powyższego programu.
{ok,<0.42.0>}
Aby zaimplementować Hello world web server w Erlang wykonaj następujące czynności -
Step 1 - Zaimplementuj następujący kod -
-module(helloworld).
-export([start/0,service/3]).
start() ->
inets:start(httpd, [
{modules, [
mod_alias,
mod_auth,
mod_esi,
mod_actions,
mod_cgi,
mod_dir,
mod_get,
mod_head,
mod_log,
mod_disk_log
]},
{port,8081},
{server_name,"helloworld"},
{server_root,"D://tmp"},
{document_root,"D://tmp/htdocs"},
{erl_script_alias, {"/erl", [helloworld]}},
{error_log, "error.log"},
{security_log, "security.log"},
{transfer_log, "transfer.log"},
{mime_types,[
{"html","text/html"}, {"css","text/css"}, {"js","application/x-javascript"} ]}
]).
service(SessionID, _Env, _Input) -> mod_esi:deliver(SessionID, [
"Content-Type: text/html\r\n\r\n", "<html><body>Hello, World!</body></html>" ]).
Step 2- Uruchom kod w następujący sposób. Skompiluj powyższy plik, a następnie uruchom następujące polecenia werl.
c(helloworld).
Otrzymasz następujący wynik.
{ok,helloworld}
Następnym poleceniem jest -
inets:start().
Otrzymasz następujący wynik.
ok
Następnym poleceniem jest -
helloworld:start().
Otrzymasz następujący wynik.
{ok,<0.50.0>}
Step 3 - Możesz teraz uzyskać dostęp do adresu URL - http://localhost:8081/erl/hello_world:service.