ejabberd adalah salah satu aplikasi erlang yang paling dikenal dan yang saya pelajari dengan erlang.
Saya pikir itu adalah salah satu proyek yang paling menarik untuk belajar erlang karena itu benar-benar membangun kekuatan erlang. (Namun beberapa orang akan berpendapat bahwa itu bukan OTP, tapi jangan khawatir masih ada harta karun kode hebat di dalam ...)
Mengapa
Server XMPP (seperti ejabberd) dapat dilihat sebagai router tingkat tinggi, merutekan pesan antara pengguna akhir. Tentu saja ada fitur lain, tetapi ini adalah aspek terpenting dari server pengiriman pesan instan. Itu harus merutekan banyak pesan secara bersamaan, dan menangani banyak koneksi TCP / IP.
Jadi kami memiliki 2 fitur:
- menangani banyak koneksi
- pesan rute diberi beberapa aspek pesan
Ini adalah contoh di mana erlang bersinar.
menangani banyak koneksi
Sangat mudah untuk membangun server TCP / IP scalable non-blocking dengan erlang. Bahkan, itu dirancang untuk menyelesaikan masalah ini. Dan mengingat itu dapat menelurkan ratusan ribu proses (dan bukan utas , ini adalah pendekatan berbagi-apa-apa, yang lebih sederhana untuk dirancang), ejabberd dirancang sebagai serangkaian proses erlang (yang dapat didistribusikan melalui beberapa server):
- proses koneksi klien
- proses router
- proses chatroom
- proses server ke server
Semuanya bertukar pesan.
pesan rute diberi beberapa aspek pesan
Fitur lain yang sangat dicintai dari erlang adalah pencocokan pola . Ini digunakan di seluruh bahasa.
Misalnya, dalam hal berikut:
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.
Itu 5 versi access
fungsi yang berbeda. Erlang akan memilih versi yang paling tepat mengingat argumen yang diterima. ( Config
adalah struktur tipe #config
yang memiliki type
atribut).
Itu artinya sangat mudah dan jauh lebih jelas daripada merantai if/else
atau switch/case
membuat aturan bisnis.
Untuk menyelesaikan
Menulis server scalable, itulah inti dari erlang. Semuanya dirancang agar mudah. Pada dua fitur sebelumnya, saya akan menambahkan:
- peningkatan kode hot
mnesia
, basis data relasional terdistribusi (termasuk dalam basis distribusi)
mochiweb
, di mana sebagian besar server http erlang dibangun
- dukungan biner (decoding dan encoding protokol biner semudah dulu)
- komunitas yang hebat dengan proyek-proyek open source yang hebat (
ejabberd
, couchdb
tetapi juga webmachine
, riak
dan banyak perpustakaan yang sangat mudah untuk ditanamkan)
Lebih sedikit LOC
Ada juga artikel ini dari Richard Jones. Dia menulis ulang aplikasi dari C ++ ke erlang: 75% lebih sedikit baris di erlang.