Vinova tuyển lập trình viên Mobile & Web ở Hà Nội, lương $300-1000

Article: Lập Trình Web Với Erlang 2213

ngocdaothanh.myopenid.com 172
Updated 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ư IserveMisultin 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.{#emotions_dlg.wink}

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:

  1. 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.
  2. Chuyển vào thư mục: $ERL_LIBS/nitrogen, chạy lệnh make để build Nitrogen.
  3. Để 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:

  1. Từ thư mục nào đó, gõ lệnh: nitrogen create sampleweb
  2. Vào thư mục sampleweb chay lệnh: ./start.sh
  3. 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
  • Lệnh 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.
  • Nitrogen có thể chạy trên 3 loại web server là Inets, Yaws, và MochiWeb. Mặc định Nitrogen chạy trên Inets, để nó chạy trên Yaws hoặc MochiWeb, cần (1) cài 2 cái này, (2) cấu hình load path cho phù hợp (dùng tham số -pa, hơi phức tạp chút), (3) sửa ebin/nitrogen.app từ {platform, inets} thành {platform, yaws} hoặc {platform, mochiweb}.

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:

Comments

saigon.myopenid.com 8
over 2 years ago

Nếu Erlang đang sử dụng là phiên bản R12 hoặc thấp hơn, khi cài đặt Nitrogen có thể gặp 1 số lỗi:

- Không tìm thấy file eunit.hrl:

Fix: check out: svn co http://svn.process-one.net/contribs/trunk/eunit. Copy folder eunit vào $ERL_LIBS

-Không tìm thấy file escript

Fix: tạo 1 symbolic links: ln -s /usr/lib/erlang/bin/escript  /usr/bin/escript

 

 

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content