सर्वर से उपयोगकर्ता को भेजे गए डेटा की संरचना कैसे करें?
मैसेजिंग पैटर्न का उपयोग करें । ठीक है, आप पहले से ही एक मैसेजिंग प्रोटोकॉल का उपयोग कर रहे हैं, लेकिन मेरा मतलब है कि संदेशों के रूप में परिवर्तन ... विशेष रूप से घटनाओं। जब सर्वर साइड बदलता है, तो इसका परिणाम व्यावसायिक घटनाओं में होता है। आपके परिदृश्य में, आपके ग्राहक विचार इन घटनाओं में रुचि रखते हैं। घटनाओं में उस परिवर्तन से संबंधित सभी डेटा होना चाहिए (जरूरी नहीं कि सभी डेटा देखें)। क्लाइंट पेज को तब इवेंट डेटा के साथ बनाए रखने वाले हिस्सों को अपडेट करना चाहिए।
उदाहरण के लिए, यदि आप स्टॉक टिकर को अपडेट कर रहे थे और एएपीएल बदल गया था, तो आप एएपीएल (नाम, विवरण, आदि) के बारे में सभी स्टॉक की कीमतों को नीचे या सभी डेटा को धक्का नहीं देना चाहेंगे। आप केवल AAPL, डेल्टा और नई कीमत को आगे बढ़ाएंगे। क्लाइंट पर, आप उस दृश्य पर केवल स्टॉक मूल्य अपडेट करेंगे।
क्या मुझे केवल "इस संसाधन को अपडेट किया गया है जैसी घटनाओं को भेजना चाहिए और आपको इसे AJAX कॉल के माध्यम से पुनः लोड करना चाहिए" या अपडेट किए गए डेटा को धक्का देना चाहिए और पिछले डेटा को प्रारंभिक AJAX कॉल के माध्यम से लोड करना चाहिए?
मैं ना तो कहूंगा। यदि आप ईवेंट भेज रहे हैं, तो आगे बढ़ें और इसके साथ प्रासंगिक डेटा भेजें (संपूर्ण ऑब्जेक्ट का डेटा नहीं)। इसे उस तरह की घटना के लिए एक नाम दें। (नामकरण और क्या डेटा उस घटना के लिए प्रासंगिक है, सिस्टम के मैकेनिकल कामकाज के दायरे से परे है। इसका व्यवसाय तर्क के मॉडल के साथ क्या करने के लिए अधिक है।) आपके विचार updaters को यह जानना होगा कि प्रत्येक विशिष्ट घटना का अनुवाद कैसे किया जाए। एक सटीक दृश्य परिवर्तन (अर्थात केवल जो बदला है)।
भेजे गए डेटा के सुसंगत और स्केलेबल कंकाल को कैसे परिभाषित करें? यह एक मॉडल अपडेट संदेश है या "ब्लाहब्लहब्लह के साथ एक त्रुटि" संदेश था
मैं कहूंगा कि यह एक बड़ा, खुला हुआ सवाल है, जिसे कई अन्य सवालों में तोड़कर अलग से पोस्ट किया जाना चाहिए।
हालांकि सामान्य तौर पर, आपके बैक एंड सिस्टम को आपके व्यवसाय के लिए महत्वपूर्ण घटनाओं के लिए घटनाओं को बनाना और भेजना चाहिए। वे बाहरी फीड से या बैक-एंड में ही गतिविधि से आ सकते हैं।
बैकएंड में कहीं से भी सब कुछ के बारे में डेटा कैसे न भेजें?
प्रकाशन / सदस्यता पैटर्न का उपयोग करें । जब आपका एसपीए एक नया पृष्ठ लोड करता है, जो वास्तविक समय के अपडेट प्राप्त करने में रुचि रखता है, तो पेज को केवल उन्हीं घटनाओं की सदस्यता लेनी चाहिए, जो उन घटनाओं के आने पर व्यू अपडेट लॉजिक को कॉल कर सकते हैं। आपको शायद पब / उप तर्क की आवश्यकता होगी। सर्वर नेटवर्क लोड को कम करने के लिए। वेबसैट पब / उप के लिए पुस्तकालय मौजूद हैं, लेकिन मुझे यकीन नहीं है कि वे रेल पारिस्थितिकी तंत्र में क्या हैं।
सर्वर और क्लाइंट पक्ष दोनों पर व्यावसायिक तर्क दोहराव को कैसे कम करें?
ऐसा लगता है कि आपको क्लाइंट और सर्वर दोनों पर व्यू डेटा अपडेट करना है। मेरा अनुमान है कि आपको सर्वर-साइड व्यू डेटा की आवश्यकता है ताकि रियल-टाइम क्लाइंट शुरू करने के लिए आपके पास स्नैपशॉट हो। यह होने के नाते कि दो भाषाएँ / प्लेटफ़ॉर्म शामिल हैं (रूबी और जावास्क्रिप्ट), व्यू अपडेट लॉजिक दोनों में लिखना होगा। ट्रांसप्लिंग से अलग (जिसके अपने मुद्दे हैं), मुझे उसके आसपास कोई रास्ता नहीं दिख रहा है।
तकनीकी बिंदु: डेटा हेरफेर (अद्यतन देखें) व्यावसायिक तर्क नहीं है। यदि आप मामले के सत्यापन का उपयोग करते हैं, तो यह अपरिहार्य लगता है क्योंकि ग्राहक का सत्यापन अच्छे उपयोगकर्ता अनुभव के लिए आवश्यक है, लेकिन अंततः सर्वर द्वारा भरोसा नहीं किया जा सकता है।
यहां बताया गया है कि मैं इस तरह की चीज को अच्छी तरह से कैसे देखता हूं।
ग्राहक दृश्य:
- एक दृश्य स्नैपशॉट और दृश्य के अंतिम देखे गए इवेंट नंबर का अनुरोध करता है
- यह दृश्य को फिर से दिखाएगा ताकि ग्राहक को खरोंच से निर्माण न करना पड़े।
- सादगी के लिए HTTP GET हो सकता है
- एक वेबस्कैट कनेक्शन बनाता है और दृश्य के अंतिम ईवेंट नंबर से शुरू होकर, विशिष्ट ईवेंट की सदस्यता लेता है।
- वेबसोकेट पर ईवेंट प्राप्त करता है और ईवेंट प्रकार / डेटा के आधार पर इसके दृश्य को अपडेट करता है।
ग्राहक कमांड:
- डेटा परिवर्तन का अनुरोध करें (HTTP PUT / POST / DELETE)
- प्रतिक्रिया केवल सफलता या विफलता + त्रुटि है
- (परिवर्तन के कारण उत्पन्न घटना) वेबसोकेट पर आएगी और एक दृश्य अपडेट को ट्रिगर करेगी।
सर्वर पक्ष वास्तव में सीमित जिम्मेदारियों के साथ कई घटकों में टूट सकता है। एक जो सिर्फ आने वाले अनुरोधों को संसाधित करता है और घटनाओं को बनाता है। एक अन्य ग्राहक सदस्यता का प्रबंधन कर सकता है, घटनाओं के बारे में सुन सकता है (इन-प्रोसेस कह सकता है) और ग्राहकों को उचित घटनाओं को आगे बढ़ा सकता है। आपके पास एक तीसरा हो सकता है जो घटनाओं के बारे में सुनता है और सर्वर-साइड विचारों को अपडेट करता है - शायद यह भी ग्राहकों द्वारा घटनाओं को प्राप्त करने से पहले होता है।
मैंने जो वर्णन किया है वह CQRS + मैसेजिंग का एक रूप है , और जिस तरह के मुद्दों का आप सामना कर रहे हैं, उसे संबोधित करने के लिए एक विशिष्ट रणनीति।
मैं इस विवरण में इवेंट सोर्सिंग नहीं लाया क्योंकि मुझे यकीन नहीं है कि यह कुछ ऐसा है जिसे आप लेना चाहते हैं या यदि आपको इसकी आवश्यकता है। लेकिन यह एक संबंधित पैटर्न है।