ejabberd là một trong những ứng dụng erlang được biết đến nhiều nhất và là ứng dụng tôi học erlang.
Tôi nghĩ đó là một trong những dự án thú vị nhất để học erlang bởi vì nó thực sự dựa trên sức mạnh của erlang. (Tuy nhiên, một số người sẽ cho rằng đó không phải là OTP, nhưng đừng lo lắng vẫn còn một kho mã tuyệt vời bên trong ...)
Tại sao ?
Một máy chủ XMPP (như ejabberd) có thể được xem như một bộ định tuyến cấp cao, định tuyến tin nhắn giữa những người dùng cuối. Tất nhiên có những tính năng khác, nhưng đây là khía cạnh quan trọng nhất của một máy chủ nhắn tin tức thời. Nó phải định tuyến nhiều tin nhắn đồng thời và xử lý nhiều kết nối TCP / IP.
Vì vậy, chúng tôi có 2 tính năng:
- xử lý nhiều kết nối
- tin nhắn định tuyến đưa ra một số khía cạnh của tin nhắn
Đây là những ví dụ nơi erlang tỏa sáng.
xử lý nhiều kết nối
Rất dễ dàng để xây dựng các máy chủ TCP / IP không chặn có thể mở rộng với erlang. Trong thực tế, nó được thiết kế để giải quyết vấn đề này. Và cho nó có thể sinh ra hàng trăm ngàn quá trình (và không phải chủ đề , đó là cách tiếp cận không chia sẻ, đơn giản hơn để thiết kế), ejabberd được thiết kế như một tập hợp các quy trình erlang (có thể được phân phối trên nhiều máy chủ):
- quá trình kết nối khách hàng
- quá trình định tuyến
- quá trình phòng chat
- quy trình máy chủ đến máy chủ
Tất cả đều trao đổi tin nhắn.
tin nhắn định tuyến đưa ra một số khía cạnh của tin nhắn
Một tính năng rất đáng yêu khác của erlang là khớp mẫu . Nó được sử dụng trong suốt ngôn ngữ.
Chẳng hạn, như sau:
access(moderator, _Config)-> rw;
access(participant, _Config)-> rw;
access(visitor, #config{type="public"})-> r;
access(visitor, #config{type="public_rw"})-> rw;
access(_User,_Config)-> none.
Đó là 5 phiên bản khác nhau của access
chức năng. Erlang sẽ chọn phiên bản phù hợp nhất với các đối số nhận được. ( Config
là một cấu trúc của loại#config
có type
thuộc tính).
Điều đó có nghĩa là nó rất dễ dàng và rõ ràng hơn nhiều so với xích if/else
hoặcswitch/case
đưa ra các quy tắc kinh doanh.
Bọc lại
Viết các máy chủ có thể mở rộng, đó là toàn bộ quan điểm của erlang. Tất cả mọi thứ được thiết kế nó làm cho điều này dễ dàng. Trên hai tính năng trước, tôi sẽ thêm:
- nâng cấp mã nóng
mnesia
, cơ sở dữ liệu quan hệ phân tán (bao gồm trong phân phối cơ sở)
mochiweb
, trên đó hầu hết các máy chủ http erlang được xây dựng trên
- hỗ trợ nhị phân (giải mã và mã hóa giao thức nhị phân dễ dàng hơn bao giờ hết)
- một cộng đồng lớn với các dự án mã nguồn mở tuyệt vời (
ejabberd
, couchdb
mà còn webmachine
, riak
và một loạt các thư viện rất dễ dàng để nhúng)
Ít địa phương hơn
Ngoài ra còn có bài viết này từ Richard Jones. Ông viết lại một ứng dụng từ C ++ sang erlang: 75% số dòng trong erlang.