ejabberd est l'un des plus bien savoir erlang application et celui que j'ai appris erlang.
Je pense que c'est l'un des projets les plus intéressants pour l'apprentissage erlang parce que c'est vraiment bâtiment sur erlang force. (Cependant, certains diront qu'il n'est pas le bureau du procureur, mais ne vous inquiétez pas il y a encore un trésor de grand code de l'intérieur...)
Pourquoi ?
Un serveur XMPP (comme ejabberd) peut être vu comme un niveau élevé de routeur, le routage des messages entre les utilisateurs finaux. Bien sûr, il ya d'autres fonctions, mais c'est l'aspect le plus important d'un serveur de messagerie instantanée. Il a de la route de nombreux messages simultanément, et de manipuler beaucoup de beaucoup de connexions TCP/IP.
Nous avons donc 2 caractéristiques:
- gérer plusieurs connexions
- itinéraire messages de certains aspects du message
Ce sont des exemples où erlang brille.
gérer plusieurs connexions
Il est très facile de construire évolutive non bloquants serveurs TCP/IP avec erlang. En fait, il a été conçu pour résoudre ce problème.
Et étant donné qu'il peut pondre des centaines de milliers de processus (et non pas les threads, c'est une part de rien", ce qui est plus simple à concevoir), ejabberd est conçu comme un ensemble de processus erlang (qui peuvent être distribués sur plusieurs serveurs) :
- client processus de connexion
- processus de routeur
- tchat processus
- un serveur à un processus de
Tous d'entre eux à des échanges de messages.
itinéraire messages de certains aspects du message
Un autre très aimable fonction d'erlang est le pattern matching.
Il est utilisé tout au long de la langue.
Par exemple, dans le code suivant :
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.
C'est 5 versions différentes de l' access
fonction.
Erlang va sélectionner la version la plus appropriée étant donné les arguments reçus. (Config
est une structure de type #config
qui a type
d'attribut).
Cela signifie qu'il est très facile et beaucoup plus clair que le chaînage if/else
ou switch/case
pour rendre l'entreprise à des règles.
Pour conclure
L'écriture des serveurs évolutifs, c'est l'ensemble de point d'erlang. Tout est conçu pour qu'elle ce qui en fait facile. Sur les deux précédentes fonctions, j'ajouterais :
- chaud de mise à niveau du code
-
mnesia
, distribué de bases de données relationnelles (inclus dans la distribution de base)
-
mochiweb
, sur laquelle la plupart des http erlang serveurs sont construits sur
- binaire de soutien (encodage et le décodage de protocole binaire facile que jamais)
- une grande communauté avec beaucoup de projets open source (
ejabberd
, couchdb
mais aussi webmachine
, riak
et d'une flopée de bibliothèque très facile à intégrer)
Moins De Ldc
Il y a aussi cet article de Richard Jones. Il l'a réécrit une application de C++ pour erlang: 75% moins de lignes en erlang.