इसे संभालने का एक आसान तरीका प्रत्येक संदेश को प्रत्येक संदेश के साथ एक आईडी निर्दिष्ट करना होगा। क्लाइंट को उस नवीनतम संदेश का ट्रैक रखने की आवश्यकता होगी जिसे वह प्राप्त हुआ था, और पुन: कनेक्शन पर सर्वर पर उस संदेश आईडी को भेज दिया जाएगा; और सर्वर को क्लाइंट को सभी मिस्ड संदेशों को नीचे भेजने की आवश्यकता होगी। लागू करने के लिए उचित रूप से सरल होना चाहिए।
संपादित करें: मुझे नहीं लगता कि आपको सर्वर पर किसी भी वास्तविक स्थिति को उचित बनाए रखना होगा - मुझे लगता है कि लगभग सभी इसे आपके डेटास्टोर या आपके क्लाइंट को धक्का दे सकते हैं। ग्राहक आईडी या टाइमस्टैम्प अंतिम संदेश की है कि यह प्राप्त किया था ऊपर भेजना होगा:
$.connection.myHub.server.updateMe(lastMessageId);
आप समर्थन डेटासंग्रह किसी प्रकार चाहते हैं - तो जब सर्वर updateMe()
संदेश प्राप्त करता है, यह एक करना होगा डेटाबेस पर क्वेरी करें और सभी पंक्तियों को एक आईडी के साथ खींचें जो अभी प्राप्त हुआ है उससे अधिक है। यह UpdateMe()
विधि के वापसी मूल्य के हिस्से के रूप में ग्राहकों को वापस कर देगा। और फिर यह किसी भी नए संदेश को वितरित करने का प्रयास करेगा जो क्लाइंट पर विधियों को कॉल करके सामान्य रूप से उसी तरह आएगा।
स्टेटलेस के लिए सिग्नलआर का लक्ष्य होने के नाते: मैं उस पर टिप्पणी नहीं कर सकता, यह देखने से परे कि मैं किसी भी उचित जटिल वास्तविक दुनिया के अनुप्रयोग की कल्पना नहीं कर सकता जिसे किसी प्रकार की बैकिंग डेटास्टोर की आवश्यकता नहीं होगी, चाहे वह सिग्नलआर या कुछ अन्य ढांचे (डब्ल्यूसीएफ, एक्सस्केट्स इत्यादि) पर है, थोड़ा अंतर बनाता है।
स्रोत
2012-12-28 07:01:36
आप देख रहे हैं 100% गारंटी वितरण के लिए, SignalR अपने समाधान के लिए एक अच्छे उम्मीदवार नहीं है। आपको एक मजबूत क्यूइंग सिस्टम की आवश्यकता है। – EkoostikMartin
आपको RabbitMQ (http://www.rabbitmq.com/) पर विचार करना चाहिए।जब भी क्लाइंट संदेश से खींचने के लिए उपलब्ध नहीं है, तब भी आप प्रत्येक क्लाइंट के लिए कतार पर संदेशों को कतारबद्ध कर सकते हैं। – rpgmaker
+1 EkoostikMartin। यदि आप विश्वसनीय संदेश की तलाश में हैं तो आपको सिग्नलआर का उपयोग करने के शीर्ष पर लेयर करने की आवश्यकता है। – davidfowl