2011-01-14 17 views
5

मेरे पास एक ऐसा एप्लिकेशन है जो स्वयं को ईवेंट/श्रोता मॉडल में उधार देता है। कई अलग-अलग प्रकार के डेटा प्रकाशित होते हैं (घटना), फिर उस डेटा (श्रोताओं) पर कार्य करने की कई अलग-अलग चीजें हो सकती हैं या नहीं। श्रोताओं को होने की कोई विशिष्ट व्यवस्था नहीं है और प्रत्येक श्रोता यह निर्धारित करेगा कि घटना पर कार्य करने की आवश्यकता है या नहीं।रेलवे पर घटना/पर्यवेक्षक संचालित रूबी

इस कार्य को पूरा करने के लिए रेल ऐप्स के लिए कौन से टूल्स हैं? मैं अपने आप को ऐसा करने की जरूरत नहीं करने के लिए आशा करती हूं कि

संपादित करें (। हालांकि, मैं यह कर सकते हैं यह है कि बिग एक सौदा नहीं है।): पर्यवेक्षक पैटर्न एक बेहतर विकल्प हो सकता है इस

+1

क्या ये श्रोताओं अलग प्रक्रियाएं होने जा रहे हैं या क्या वे सरल कोड ब्लॉक हैं जिन्हें डेटा प्रकाशन के दौरान बुलाया जा सकता है? – Nemo157

+0

शायद साधारण कोड ब्लॉक 80% समय ब्लॉक करता है। अलग प्रक्रिया दुर्लभ मामला होगी लेकिन फिर भी शायद होगा। – Drew

उत्तर

5

EventMachine देखें। यह रूबी के लिए एक बहुत लोकप्रिय घटना प्रसंस्करण पुस्तकालय है। यह काफी अच्छा लगता है, और कई अन्य पुस्तकालय इसका लाभ लेते हैं (Cramp)। http://rubylearning.com/blog/2010/10/01/an-introduction-to-eventmachine-and-how-to-avoid-callback-spaghetti/

4

आप शायद चाहता हूँ के लिए ActiveRecord के Observer कक्षा में हुक करें।

http://api.rubyonrails.org/v3.2.13/classes/ActiveRecord/Observer.html

इसके साथ

, अपने मॉडल कई जीवन चक्र की घटनाओं के लिए कस्टम तर्क पर अमल कर सकते हैं:

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

अगर मैं अपने इरादे सही ढंग से समझ, तुम सब करने की ज़रूरत होगी तरीकों कहते हैं जो उन कॉलबैक से किसी ईवेंट को आपके श्रोता की कार्रवाई का प्रतिनिधित्व करता है।

+0

यह बहुत करीब है लेकिन प्रकाशित होने वाली हर चीज एक ActiveRecord नहीं है। ActiveRecord से बंधे बिना मैं कुछ ऐसा कैसे करूं? – Drew

+0

आप ActiveRecord कार्यक्षमता को ActiveRecord: पर्यवेक्षक सहित हमेशा गैर-ActiveRecord क्लास में ला सकते हैं। यहां अधिक जानकारी: http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like-activerecord/ – Shaun

2

आप ActiveSupport :: Notifications.instrument उपयोग कर सकते हैं:

यहां एक अच्छी शुरूआत है।

यह घटना प्रतिक्रिया पर भेजने के लिए डीकॉप्लिंग घटना के लिए एक सामान्य उद्देश्य वाला पुल है। यह इवेंटमैचिन के विपरीत, एक वेब अनुरोध के दौरान सभी श्रोताओं को निष्पादित करने की दिशा में तैयार है, जो कई समवर्ती चीजें होने की दिशा में तैयार है। event_dispatcher

यह मणि आप सदस्यता और एक सरल और प्रभावी तरीका के साथ अपने आवेदन में की घटनाओं के लिए सुनने के लिए अनुमति देता है, एक साधारण पर्यवेक्षक कार्यान्वयन प्रदान करता है:

0

मैं एक गहरे लाल रंग का रत्न उपयोग के इस मामले को बिल्कुल जवाब बनाया है।

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