2015-12-14 3 views
7

मैं वेबसाकेट्स के साथ काम करने के लिए नए Rails ActionCable के साथ फीनिक्स चैनलों की तुलना करने की कोशिश कर रहा हूं।फीनिक्स चैनल से प्रसारण कैसे अन्य नोड्स पर क्लाइंट हिट करता है?

कुछ संदर्भों के लिए, एक्शनकेबल सभी ग्राहकों को संदेश प्रसारित करते समय पबसब को संभालने के लिए रेडिस का उपयोग करता है। उदाहरण परिदृश्य: एक अलग नोड पर 3 रेल प्रक्रियाओं में से 1 सभी वेब सर्वरों से जुड़े ग्राहकों को प्रसारित करने में सक्षम हो जाएगा। यह रेडिस को मारकर किया जाता है जो बदले में सभी रेल सर्वरों को प्रकाशित करता है जो उसके सभी जुड़े ग्राहकों को धक्का देते हैं।

मैंने हाल ही में 2 million websocket connections achieved by Phoenix websocket कनेक्शन के बारे में पढ़ा है।

यहां तक ​​कि मशीनों के एक क्लस्टर पर

, अपने संदेश भर में प्रसारित कर रहे हैं नोड्स स्वचालित रूप से

कैसे है: फीनिक्स 1.0 रिलीज नोट्स इस बारे में चैनलों का उल्लेख:

इसके अलावा इस मणि पाया फीनिक्स नोड्स में ग्राहकों को प्रसारित करने में सक्षम है? क्या यह मेलबॉक्स और/या हुड के नीचे कुछ अन्य इंटरप्रोसेस संचार का उपयोग कर रहा है?

यह प्रश्न 2 के समान है 2) post में।

धन्यवाद!

उत्तर

13

फीनिक्स की पबसब परत पूरी तरह से मानक पुस्तकालय के साथ लागू की गई है। एरलांग वीएम का समवर्ती मॉडल बॉक्स से बाहर वितरित किया जाता है। तो मेलबॉक्स/मैसेजिंग मॉडल बस काम करता है गीलेर आप स्थानीय रूप से send(some_local_pid, :a_message) या वैश्विक स्तर पर send(some_pid_on_another_machine, :a_message) संदेश भेज रहे हैं। यह एलिक्सीर और एर्लांग के बारे में अद्भुत चीजों में से एक है जो फीनिक्स को रेडिस जैसी निर्भरताओं को छोड़ने की अनुमति देता है। आप उत्सुक कैसे फीनिक्स के पबसब प्रणाली इसके कार्यान्वयन में इन सुविधाओं का लाभ उठाता है कर रहे हैं, इस ब्लॉग पोस्ट देखें:

http://www.zohaib.me/guts-of-phoenix-channels/?utm_campaign=elixir_radar_28&utm_medium=email&utm_source=RD+Station

tldr; हम स्थानीय ईटीएस टेबल का उपयोग स्थानीय प्रक्रियाओं के लिए पबसब सदस्यता को रखने के लिए करते हैं, और हम एक :pg2 समूह का उपयोग करके नोड्स में प्रसारित करते हैं कि प्रत्येक PubSub.Local सर्वर का सदस्य होता है। जब PubSub.Local सर्वर प्रसारण प्राप्त करता है, तो यह स्थानीय ईटीएस सदस्यता को देखकर स्थानीय रूप से सभी ग्राहकों को संदेश भेजता है। वास्तविक आईपीसी विवरण और नोड < -> नोड संचार पूरी तरह से रनटाइम द्वारा संभाला जाता है।

+0

धन्यवाद! यह सब अच्छा लगता है। मैं उत्सुक हूं कि वेब सर्वर एक दूसरे के बारे में कैसे पीयर प्रसारण सक्षम करने के बारे में जानते हैं, लेकिन मैं इसे अपने स्वयं के शोध के लिए सहेज दूंगा। ऐसा लगता है कि यह मॉडल एक कार्यकर्ता कतार के लिए भी लागू होगा। एक वास्तविक फीनिक्स पृष्ठभूमि कार्यकर्ता ढांचा साइडकीक या [exq] (https://github.com/akira/exq) जैसे रेडिस का उपयोग नहीं करेगा, लेकिन इस दृष्टिकोण का उपयोग करेगा। – dimroc

+1

यह अगले पाठक द्वारा गुज़रने के लिए है। प्रत्येक नोड (इस मामले में वेबसर्वर) जानता है कि अन्य नोड्स से संवाद कैसे करें क्योंकि उन्होंने एप्लिकेशन को वितरित सिस्टम के रूप में तैनात किया है। अधिक जानकारी के लिए नीचे दिए गए लिंक पर क्लिक करें: http://benjamintan.io/blog/2014/05/25/connecting-elixir-nodes-on-the-same-lan/ – dimroc

संबंधित मुद्दे