Erlang - Lập trình Web
Ở Erlang, inets librarycó sẵn để xây dựng máy chủ web ở Erlang. Chúng ta hãy xem xét một số chức năng có sẵn trong Erlang để lập trình web. Người ta có thể triển khai máy chủ HTTP, còn được gọi là httpd để xử lý các yêu cầu HTTP.
Máy chủ triển khai nhiều tính năng, chẳng hạn như -
- Lớp cổng bảo mật (SSL)
- Giao diện kịch bản Erlang (ESI)
- Giao diện cổng chung (CGI)
- Xác thực người dùng (sử dụng Mnesia, Dets hoặc cơ sở dữ liệu văn bản thuần túy)
- Định dạng tệp nhật ký chung (có hoặc không hỗ trợ disk_log (3))
- Bí danh URL
- Bản đồ hành động
- Danh sách thư mục
Công việc đầu tiên là khởi động thư viện web thông qua lệnh.
inets:start()
Bước tiếp theo là thực hiện chức năng bắt đầu của thư viện inets để máy chủ web có thể được triển khai.
Sau đây là một ví dụ về việc tạo một quy trình máy chủ web trong Erlang.
Ví dụ
-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]).
Những điểm sau đây cần lưu ý về chương trình trên.
Số cổng phải là duy nhất và không được sử dụng bởi bất kỳ chương trình nào khác. Cáchttpd service sẽ được bắt đầu trên cổng này không.
Các server_root và document_root là các tham số bắt buộc.
Đầu ra
Sau đây là kết quả của chương trình trên.
{ok,<0.42.0>}
Để thực hiện một Hello world web server trong Erlang, hãy thực hiện các bước sau:
Step 1 - Thực hiện đoạn mã sau -
-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- Chạy đoạn mã như sau. Biên dịch tệp ở trên và sau đó chạy các lệnh sau trongerl.
c(helloworld).
Bạn sẽ nhận được kết quả sau.
{ok,helloworld}
Lệnh tiếp theo là -
inets:start().
Bạn sẽ nhận được kết quả sau.
ok
Lệnh tiếp theo là -
helloworld:start().
Bạn sẽ nhận được kết quả sau.
{ok,<0.50.0>}
Step 3 - Bây giờ bạn có thể truy cập url - http://localhost:8081/erl/hello_world:service.