2010-08-04 11 views
6

मेरे पास एक जावास्क्रिप्ट-आधारित क्लाइंट है जो वर्तमान में नई सामग्री के लिए .NET वेब सेवा का मतदान कर रहा है। मतदान मतदान करते समय ... मैं इस दृष्टिकोण से खुश नहीं हूं क्योंकि मैं सिस्टम संसाधनों का उपयोग कर रहा हूं और प्राप्त करने में कोई बदलाव नहीं होने पर ओवरहेड बना रहा हूं।सर्वर-साइड एप्लिकेशन से क्लाइंट को संदेशों को धक्का देना?

मेरा प्रश्न यह है कि मैं अपने क्लाइंट को कैसे सूचित करूं कि प्रदर्शित करने के लिए नई सामग्री है? मैं इस समाधान को लागू करने के लिए किसी भी अतिरिक्त तकनीकों के लिए खुला हूं।

उत्तर

7

सबसे पहले, मतदान करने का तरीका है। आप फ्लैश या सिल्वरलाइट या धूमकेतु - http://en.wikipedia.org/wiki/Comet_(programming) के साथ ऐसा कर सकते हैं जो अधिसूचनाओं के लिए आपके लिए एक टीसीपी कनेक्शन खोल सकता है। एक वेबपृष्ठ स्वयं सॉकेट खुला नहीं रख सकता है, इसलिए वेब क्लाइंट को सीधे सूचित करने का कोई तरीका नहीं है।

[संपादित करें] लेकिन इसके बारे में सोचो, कितने ग्राहक एक बार में एक सर्वर की दिशा में एक TCP कनेक्शन पकड़ कर सकते हैं? एक बड़ी प्रणाली के लिए आप उपलब्ध सॉकेट से बहुत तेजी से भाग लेंगे क्योंकि 65k बंदरगाह उपलब्ध हैं।
आपके सर्वर को कितने समेकित कनेक्शन संभाल सकते हैं आपके हार्डवेयर संसाधनों पर निर्भर करता है। यदि आपके पास पर्याप्त स्मृति और सीपीयू है तो आपको ~ 100k और शायद अधिक संभाल करने में सक्षम होना चाहिए। लेकिन यदि प्रत्येक अनुरोध डेटाबेस या टीसीपी/आईपी पर कुछ अन्य संसाधनों तक पहुंचता है, तो आप प्रति आईपी उपलब्ध बंदरगाहों की संख्या तक सीमित हो सकते हैं (65k)। आपके पास पुश अनुरोध अलग-अलग डोमेन के विरुद्ध भी हो सकते हैं, क्योंकि ब्राउज़र सामान्य रूप से प्रति डोमेन दो समवर्ती कनेक्शन पर कैप्स करता है, इसलिए आप सामान्य पृष्ठ लोडिंग में हस्तक्षेप नहीं करेंगे।

फ्रंट में कैश सर्वर के साथ संयोजन में मतदान का उपयोग करना एक अच्छा समाधान है। आपके पास सर्वर पर तर्क हो सकता है जो प्रति क्लाइंट कैश अपडेट करता है, प्रत्येक मतदान के लिए लोड को कम करता है। आप उन उपयोगकर्ताओं के लिए कैश अपडेट कर सकते हैं जिन्होंने कैश को और भी अपडेट करने के लिए X संख्या के भीतर साइन इन/मतदान किया है। और मेरे लिए पुल को कार्यान्वित करना, तकनीकी रूप से खींचने से आसान है।

+1

हां, यह फ्लैश और सिल्वरलाइट के बिना किया जा सकता है; http://en.wikipedia.org/wiki/Comet_%28programming%29 –

+1

@ मार्सल के बारे में उत्तर देखें: धन्यवाद .. इसे प्रतिबिंबित करने के लिए मेरा उत्तर संपादित किया गया। –

+0

महान जवाब, इसने मुझे देखने के लिए कुछ अच्छे स्थान दिए। – Achilles

2

आपको COMET के बारे में शोध करना चाहिए।

कोमेट एक तकनीक है कि एक सर्वर संचार का एक HTTP खुला लाइन के माध्यम से ग्राहक ब्राउज़रों के लिए डेटा पुश करने के लिए सक्षम है।

शायद वहाँ उदाहरण कोमेट + WCF वेब सेवाओं के बारे overthere हैं।

1

http://www.ape-project.org/ मुझे लगता है कि आपके लिए एक अच्छी जगह है। यह अजैक्स पुश पर आधारित है या कुछ कहते हैं कि यह अजाक्स को उलट देता है। अन्य परियोजनाएं भी हैं और यह इस पर आधारित है: http://en.wikipedia.org/wiki/Comet_(programming)

मैंने ऐप प्रोजेक्ट का उल्लेख किया क्योंकि आप जावास्क्रिप्ट का उपयोग कर सकते हैं या यदि आप सर्वर की तरफ सी ++, PHP, पायथन आदि चाहते हैं। :-)

1

आपको पहले से ही HTTP मतदान (सीओएमईटी) के बारे में बताया गया है। यह प्रश्न खोलता है कि http सर्वर स्वयं (आईआईएस + एएसपी) डाटाबेस को मतदान किए बिना डेटाबेस में परिवर्तनों का पता कैसे लगाता है। SQL सर्वर के साथ आप Query Notifications जैसी तकनीक का उपयोग कर सकते हैं, जो आपके एएसपी.Net प्रक्रिया को अधिसूचित करने की अनुमति देता है जब किसी रिकॉर्ड में डेटाबेस में कोई परिवर्तन होता है। आप LinqToCache प्रोजेक्ट भी देख सकते हैं जो क्वेरी नोटिफिकेशन को LINQ क्वेरीज़ के साथ मिश्रित करने की अनुमति देता है।

2

WebSync, .NET/IIS के लिए धूमकेतु समाधान देखें। यह वही करेगा जो आप खोज रहे हैं। संसाधनों को बर्बाद करने के लिए कोई अतिरिक्त मतदान नहीं, केवल तभी जरूरी है जब वास्तविक हो, वास्तविक समय अपडेट ... पूरे 9 गज।

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