Article:
Lập Trình Web Với Erlang
2213
ngocdaothanh.myopenid.com 172Updated over 2 years ago |
Những ngôn ngữ đã phổ biến như Python, Ruby, PHP, và Java đều có nhiều web framework mạnh. Elang ra đời đã khoảng 20 năm, mặc dù hỗ trợ lập trình mạng tốt hơn hẳn Java nhưng khoản web còn đang chập chững. Hãy thử viết chương trình Hello World để xem xét một số thư viện và framework xem sao.
Có 3 thư viện đáng kể: Inets, Yaws, và MochiWeb. Những thư viện khác ví dụ như Iserve và Misultin tuy nhanh hơn nhưng đều bé tẹo nên thiếu nhiều tính năng, chỉ thích hợp cho nhiệm vụ đặc biệt nào đó mà thôi. Dựa trên 1 trong 3 thư viện đã vững chắc này, có thể xây dựng ngay chương trình web, hoặc xây dựng framework rồi mới xây dựng chương trình web dựa trên framework. Sau khi xem xét 3 thư viện trên ta xem xét tiếp các framework: Erlang Web, ErlyWeb, Nitrogen, BeepBeep, Ale.
Inets
Erlang có sẵn thư viện để viết web gọi là Inets.
[còn tiếp]
Yaws
Nói dễ hiểu thì Yaws = Apache + PHP. Nghĩa là nó cung cấp sẵn web server và bộ khung để viết chương trình theo kiểu PHP. Nếu muốn tự viết web framework từ đầu như là bài tập để nâng cao tay nghề hoặc đề tài tốt nghiệp, thì Yaws là lựa chọn tuyệt vời.
Nhiều người biết đến Yaws nhờ benchmark Apache vs. Yaws do tác giả Erlang thực hiện. Theo benchmark này, Yaws chịu được 80 ngàn kết nối đồng thời, trong khi Apache chỉ được 4 ngàn là ngoẻo.

Sau khi cài Yaws (nói chung nên cài cả Erlang và Yaws thông qua chương trình quản lí gói, thay vì tự biên dịch) ta tạo cấu trúc thư mục như sau:
hello_yaws
yaws.conf
ebin
log
include
src
public
index.yaws
yaws.conf:
logdir = log
ebin_dir = ebin
<server localhost>
port = 8000
listen = 0.0.0.0
docroot = public
</server>
index.yaws:
<html>
<head>
<title>Hello from Yaws</title>
</head>
<body>
<erl>
out(A) ->
{html, "Hello World"}.
</erl>
</html>
Chuyển vào thư mục hello_yaws, chạy lệnh yaws -i để bật Yaws trên cổng 8000. Dùng trình duyệt vào http://localhost:8000 sẽ thấy dòng Hello World hiện ra.
Benchmark thử với lệnh ab -c 20 -n 1000 http://127.0.0.1:8000/, sẽ thấy đạt khoảng 1800req/s. Chương trình JSP đơn giản tương tự khi chạy trên Tomcat đạt khoảng 4000req/s. Cũng như Servet nhanh hơn JSP, appmod nhanh hơn .yaws (thường khoảng gấp rưỡi). Các con số này tất nhiên sẽ thay đổi khi chương trình phức tạp, có nhiều người truy cập cùng lúc, chạy cluster trên nhiều server v.v.
MochiWeb
Yaws có nhiều tài liệu hướng dẫn, nhưng hơi nguyên thuỷ. MochiWeb dễ dùng hơn nhưng tài liệu lại hầu như không có gì. So với inets và Yaws, MochiWeb được đánh giá:
I think of it as a programmable HTTP server layer. The inet library is a handy library, but not really a fully capable Web server. Yaws, on the other hand, is closer to Apache -- very capable, but with many of its own ideas about how to build your Web systems.
MochiWeb does the heavy lifting on your outward-facing HTTP connections, leaving you to write your application-specific server logic. It provides useful abstractions over the request and response, and manages your client connections and other details of pushing data between your code and your clients. It doesn't do too much for you beyond that, which is actually a plus; this means that it's straightforward to extend as part of another system. If you want to stick with your original comparison, you might see it as a sweet spot or a local maximum in the spectrum between inets and yaws when it comes to building interesting Web applications.
To make a Java analogy, mochiweb is like Java EE Servlets for Erlang. It provides a container/servlet programming model similar to Java EE, but with much less overhead.
Về mặt lịch sử, tác giả MochiWeb cho biết tại thời điểm tạo ra nó inets và Yaws khó dùng hoặc có bug, nên ông ta tự viết luôn. Về mặt cấu trúc, MochiWeb nhỏ gọn hơn Yaws nhiều, nên rất hay được dùng theo kiểu nhúng vào chương trình khác.
[còn tiếp]
Erlang Web
Tham khảo slide Erlang Web Framework.
ErlyWeb
[còn tiếp]
Nitrogen
Tham khảo slide Nitrogen Web Framework.
Khi cài đặt Erlang, có thể tạo biến môi trường bằng lệnh: export ERL_LIBS=/usr/lib/erlang/lib (giả sử thư viện Erlang được cài ở đó). Để cài Nitrogen:
- Download hoặc check out Nitrogen rồi giải nén thành thư mục nitrogen. Copy vào thư mục $ERL_LIBS.
- Chuyển vào thư mục: $ERL_LIBS/nitrogen, chạy lệnh make để build Nitrogen.
- Để từ bất kì thư mục nào cũng có thể gõ lệnh nitrogen để tạo project mới, cần tạo link liên kết đến file thực thi nitrogen trong thu mục support:
#sudo ln -s $ERL_LIBS/nitrogen/support/nitrogen /usr/local/bin/nitrogen
Giờ ta tạo thử project mới:
- Từ thư mục nào đó, gõ lệnh:
nitrogen create sampleweb - Vào thư mục sampleweb chay lệnh:
./start.sh Dùng trình duyệt web truy cập thử địa chỉ: http://localhost:8000
Hãy tham khảo trang chủ của Nitrogen để biết thêm cách tạo một trang web mới, cũng như đổi port mặc định và nhiều thông tin khác.
Ghi chú:
- Khi viết chương trình, muốn Nitrogen tự động cập nhật source code mới, ở chỗ gõ lệnh của Erlang (chứ không phải của Shell) gõ lệnh sync:go().
- Để hiện giá trị của biến gì đó ra màn hình console để debug, dùng macro DEBUG, LOG, hoặc PRINT (xem wf.inc).
- Khi tạo mới project bằng lệnh create (ví dụ ở trên là sampleweb), sẽ được cấu trúc thư mục như sau:
doc/
ebin/
src/
pages/
wwwroot/
Emakefile
Makefile
start.sh
nitrogen page /really/helloworld.erl sẽ tạo file really_helloworld.erl trong thư mục src/pages. Gõ lệnh sync:go() Nitrogen sẽ build really_helloworld.erl thành really_helloworld.beam và lưu vào thư mục ebin. URL để vào trang really_helloworld là http://localhost:8000/web/really/helloworld.Webmachine
[còn tiếp]
So sánh tốc độ
Bài viết này không chú trọng xem xét tốc độ, hãy tham khảo các liên kết sau:
172

over 2 years ago