ejabberd एक सबसे अच्छी तरह से erlang एप्लिकेशन है और जिसे मैंने सीखा है, वह है।
मुझे लगता है कि यह erlang सीखने के लिए सबसे दिलचस्प परियोजना में से एक है क्योंकि यह वास्तव में erangang की ताकत पर निर्माण कर रहा है। (हालांकि कुछ तर्क देंगे कि यह ओटीपी नहीं है, लेकिन चिंता न करें कि अभी भी अंदर महान कोड की एक प्रति है ...)
क्यों ?
एक XMPP सर्वर (ejabberd की तरह) को उच्च स्तर के राउटर के रूप में देखा जा सकता है, जो अंत उपयोगकर्ताओं के बीच संदेश भेज रहा है। बेशक वहाँ अन्य विशेषताएं हैं, लेकिन यह एक त्वरित संदेश सर्वर का सबसे महत्वपूर्ण पहलू है। इसमें कई संदेशों को एक साथ रूट करना है, और कई टीसीपी / आईपी कनेक्शनों को संभालना है।
तो हम 2 विशेषताएं हैं:
- कई कनेक्शन संभालें
- मार्ग संदेशों ने संदेश के कुछ पहलुओं को दिया
ये ऐसे उदाहरण हैं जहां एरांग चमकते हैं।
कई कनेक्शन संभालें
स्केलेबल नॉन-ब्लॉकिंग टीसीपी / आईपी सर्वरों को एर्लैंग के साथ बनाना बहुत आसान है। वास्तव में, यह इस समस्या को हल करने के लिए डिज़ाइन किया गया था। और यह देखते हुए कि यह सैकड़ों हजार प्रक्रियाओं को फैला सकता है (और धागे नहीं , यह एक शेयर-नॉन-अप्रोच है, जो डिजाइन करने के लिए सरल है), ejabberd को erlang प्रक्रियाओं के सेट के रूप में डिज़ाइन किया गया है (जिसे कई सर्वरों पर वितरित किया जा सकता है):
- क्लाइंट कनेक्शन प्रक्रिया
- राउटर प्रक्रिया
- चैटरूम प्रक्रिया
- सर्वर से सर्वर प्रक्रियाओं
सभी ने संदेशों का आदान-प्रदान किया।
मार्ग संदेशों ने संदेश के कुछ पहलुओं को दिया
एर्लैंग की एक और बहुत प्यारी विशेषता पैटर्न मिलान है । यह पूरे भाषा में उपयोग किया जाता है।
उदाहरण के लिए, निम्नलिखित में:
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.
यह access
फ़ंक्शन के 5 अलग-अलग संस्करण हैं । एर्लैंग प्राप्त तर्कों को देखते हुए सबसे उपयुक्त संस्करण का चयन करेगा। ( Config
एक प्रकार की संरचना है #config
जिसमें एक type
विशेषता है)।
इसका मतलब यह है कि यह बहुत आसान है और बहुत स्पष्ट है कि इसका पीछा करना if/else
या switch/case
व्यावसायिक नियम बनाना।
काम ख़त्म करना
स्केलेबल सर्वर लिखना, यह इरलैंग का संपूर्ण बिंदु है। सब कुछ इसे आसान बना रहा है। पिछली दो विशेषताओं पर, मैं जोड़ूंगा:
- हॉट कोड अपग्रेड
mnesia
, वितरित संबंधपरक डेटाबेस (आधार वितरण में शामिल)
mochiweb
जिस पर ज्यादातर http erlang सर्वर बनाए जाते हैं
- बाइनरी समर्थन (डीकोडिंग और एन्कोडिंग बाइनरी प्रोटोकॉल आसान है)
- महान ओपन सोर्स प्रोजेक्ट्स के साथ एक महान समुदाय (
ejabberd
, couchdb
लेकिन यह भी webmachine
, riak
और लाइब्रेरी के एक स्लीव को एम्बेड करना बहुत आसान है)
कम LOCs
रिचर्ड जोन्स का यह लेख भी है । उन्होंने C ++ से erlang: erlang में 75% कम लाइनों के लिए एक एप्लिकेशन को फिर से लिखा।