2010-01-15 8 views
8

के साथ AJAX और क्लाइंट-सर्वर आर्किटेक्चर मुझे वेबसाइटों को प्रोग्राम करना है, लेकिन मुझे स्थिर HTML प्रकृति पसंद नहीं है। मैं क्लाइंट-सर्वर आर्किटेक्चर के अधिक पसंद करता हूं।जावास्क्रिप्ट

अब मुझे लगा है कि XMLhttp के साथ, आप मूल रूप से अपने पृष्ठ को गतिशील रूप से अपडेट कर सकते हैं और किसी सर्वर से जानकारी/कार्रवाई के लिए अनुरोध/अनुरोध कर सकते हैं। तो यह मूल रूप से ग्राहक क्षेत्र को कवर करेगा।

लेकिन क्लाइंट-सर्वर आर्किटेक्चर को पूरा करने के लिए, सर्वर के लिए जानकारी मांगने/अनुरोध करने के लिए भी जरूरी है, बिना पूछे।

क्या कोई तरीका है, उदाहरण के लिए चैट सर्वर के लिए, सभी ग्राहकों को एक प्राप्त संदेश वापस भेजने के लिए (ग्राहक एक वेब ब्राउज़र का उपयोग करते हैं) बिना ग्राहकों को एक निश्चित अंतराल में पूछताछ करना पड़ता है? मैं इसे कार्यान्वित करना चाहता हूं, जब आप कुछ टाइप करते हैं तो देख सकते हैं।

+0

क्लाइंट साइड कोड अनुरोध नया कोड होने के बजाय, आप वेब सर्वर से "पुश" ऑपरेशन के बारे में बात कर रहे हैं, है ना? –

+0

सही! मैं एक सर्वर कमांड जारी करना चाहता हूं जो क्लाइंट एक्शन को ट्रिगर करता है। –

उत्तर

13

इसे पूरा करने के कई अलग-अलग तरीके हैं। उनमें से कुछ पहले से ही यहां उत्तर दिए गए हैं, लेकिन मैं कुछ और साथ ही उनके विचारों को भी शामिल करना चाहता था।

1।मतदान

नई जानकारी की जांच के लिए सर्वर पर बार-बार अनुरोध किए जाते हैं। ऐसा करने का यह सबसे बुरा तरीका है, लेकिन शायद सबसे आसान है। यदि आपकी साइट में कम संख्या में उपयोगकर्ता होंगे, तो यह इस तरह से करने योग्य हो सकता है।

यह setInterval(myFunction, n) जावास्क्रिप्ट में XMLHttpRequests सर्वर को प्रत्येक n मिलीसेकंड भेजने के लिए पूरा किया जा सकता है। फिर, सर्वर पर, आप इसे अपनी नई जानकारी के साथ जवाब देते हैं, जब आपके पास होता है, या कुछ संदेश जो कोई नई जानकारी का तात्पर्य नहीं है।

2. लांग मतदान

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

ऐसा करने का सबसे आसान तरीका यह है कि AJAX अनुरोध को संभालने वाला पृष्ठ केवल नई जानकारी उपलब्ध होने का इंतजार कर रहा है, फिर जवाब दें। यह आपके सर्वर पर बहुत से कनेक्शन जोड़ सकता है। तो, देखभाल के साथ उपयोग करें।

3. कोमेट

COMET मूल रूप से लंबे समय तक मतदान है, लेकिन सर्वर ने इसके लिए ठीक से सेटअप है। यह जानता है कि ये कनेक्शन "वास्तविक" नहीं हैं और यह उन्हें संभालने के लिए कम संसाधनों का उपयोग करता है। यह इस समस्या के लिए एक अच्छा समाधान है, लेकिन यह आवश्यक है कि सर्वर इस उद्देश्य के लिए स्पष्ट रूप से सेटअप हो। अन्य लोकप्रिय सर्वरों के लिए कॉमेट सर्वर और सीओएमईटी एडिन हैं, लेकिन इसके लिए कुछ सेटअप और कभी-कभी कुछ पैसे की आवश्यकता होगी।

.NET पर इसे कार्यान्वित करना दुनिया में सबसे आसान चीज़ नहीं है। आप समाधान के लिए भुगतान कर सकते हैं, किसी और के कोड को खोजने का प्रयास करें जो कुछ समान करता है, या इसे स्वयं लिखने का प्रयास करें। मुझे इसके लिए कोई सभ्य मुक्त समाधान नहीं मिला है। अगर किसी और के पास है, तो कृपया टिप्पणी करें।

4. रिया

एक अन्य समाधान अपने पृष्ठ पर फ्लैश, Silverlight, या जावा एप्लेट शामिल करने के लिए किया जाएगा। लोग अक्सर 1x1 ऑब्जेक्ट का उपयोग करके ऐसा करते हैं ताकि वे सर्वर से बात करने के लिए फ्लैश या सिल्वरलाइट का उपयोग कर सकें। यदि आप निर्भरता को जोड़ने में कोई फर्क नहीं पड़ता है, तो यह एक सभ्य समाधान है। यदि आप पहले से ही सिल्वरलाइट या फ्लैश को जानते हैं, तो यह लागू करने के लिए अपेक्षाकृत सरल हो सकता है।

आप इन विकल्पों में से प्रत्येक के लिए इंटरनेट पर ट्यूटोरियल पा सकते हैं।

5. वेब सॉकेट

आप अत्याधुनिक पर हैं, तो आप Web Sockets पर गौर कर सकते हैं। यह केवल आधुनिक ब्राउज़रों के नवीनतम निर्माण में उपलब्ध है। यह एचटीएमएल 5 का हिस्सा था, लेकिन अब यह अपनी खुद की कल्पना हो सकती है। भले ही, इसका मतलब है कि पुराने ब्राउज़र इसे संभालने में सक्षम नहीं होंगे। लेकिन, यदि आप ब्राउज़र के नवीनतम करने के लिए अपने आप को सीमित करने से परहेज नहीं करते, तो आप इस अद्भुत सुविधा का उपयोग कर सकते हैं।

मुझे विश्वास है कि Chromium केवल ब्राउज़र है कि वर्तमान में इसका समर्थन करता है। हालांकि, वहाँ काम फ़ायरफ़ॉक्स और WebKit में इस लागू करने के लिए किया जा रहा है।

मैं तुम्हें विवाद को छोड़ देंगे और बस का कहना है कि यह करता है कि वास्तव में क्या आप इसे करना चाहते हैं। कल्पना का सार यह सब कहते हैं।

यह विनिर्देश एक एपीआई को परिभाषित करता है जो वेब पेजों को दूरस्थ सॉफ़्टवेयर के साथ दो-तरफा संचार के लिए वेब सॉकेट प्रोटोकॉल का उपयोग करने में सक्षम बनाता है।

विशेष उल्लेख

आप नोड जे एस की दुनिया में रुचि रखते हैं, तो आप Socket IO के साथ गलत नहीं जा सकते। यह ब्राउजर के लिए जो भी तकनीक उपलब्ध है, वह सर्वोत्तम रूप से लागू होगा।

निष्कर्ष

सबसे अच्छा विकल्प नोड जे एस पर Socket.IO है। हालांकि, एएसपी.NET समाधान के लिए, यदि आप कर सकते हैं, तो सीओएमईटी या वेब सॉकेट के लिए जाएं। अन्यथा, फ्लैश/सिल्वरलाइट का उपयोग करना भयानक नहीं है। अंत में, मतदान और लंबे मतदान अंतिम रिसॉर्ट्स होना चाहिए। आप हमेशा इनमें से किसी एक का समर्थन कर सकते हैं, फिर क्लाइंट के ब्राउज़र में इसके लिए समर्थन नहीं होने पर दूसरे पर वापस आना।

+1

सावधानीपूर्वक विचार करने के बाद, मैंने गैर-क्रोमियम के लिए वेबसाकेट + वेबसाकेट-फ्लैशब्रिज चुना। यह संयोजन आईफोन + आईपैड सहित सभी ब्राउज़रों के लिए ठीक काम करता है। –

1

क्लाइंट-उपयोगकर्ता टाइपिंग शुरू करते समय क्लाइंट को सर्वर को बताना होता है। आपके पास यहां कुछ विकल्प हैं।

  1. नवीनतम गतिविधि के लिए सर्वर से लगातार अनुरोध। चैट में शामिल प्रत्येक उपयोगकर्ता के लिए यह होगा। सर्वर पर उपयोगकर्ता-विशिष्ट गतिविधि को भी भेजने के लिए एक ही अनुरोध का उपयोग किया जा सकता है: "जोनाथन टाइप कर रहा है ..."

  2. लंबे मतदान। यह अनिवार्य रूप से सर्वर से जानकारी का अनुरोध करता है, और सर्वर तब तक खुलता रहता है जब तक कि उसे वापस भेजने के लिए कुछ न हो। तो आपके अनुरोध कम हो गए हैं, लेकिन आपके कनेक्शन लंबे समय तक खोले गए हैं।

अपने यातायात के आधार पर, डेटा के प्रकार प्रेषित किया जा रहा, सर्वर-पर्यावरण, और कई अन्य कारकों, इनमें से एक विकल्प अन्य की तुलना में अधिक चमक सकता है।

0

आप पुश अधिसूचनाओं के लिए सिल्वरलाइट का उपयोग कर सकते हैं। PollingDuplexHttpBinding पर देखें। चूंकि आप एएसपी.NET एमवीसी का उपयोग कर रहे हैं, adding Silverlight आसान होगा।

अधिक जानकारी के लिए this page पर देखें।

0

REST आर्किटेक्चर के आधार पर एचटीएमएल सिस्टम पर आधारित है, सर्वर की भूमिका क्लाइंट के लिए खींचने के लिए संसाधन के रूप में कार्य करना है। मैं सामान्यीकरण कर रहा हूं लेकिन सर्वर पक्ष की बजाय क्लाइंट पक्ष पर इस प्रकार की कार्रवाई को लागू करने के लिए उपकरण हैं।

आप पुस्तकालय का उपयोग/लिखने से बेहतर हैं जो समय-समय पर सर्वर से अपडेट का अनुरोध कर सकते हैं। आप जावास्क्रिप्ट ऑब्जेक्ट में इन प्रकार के अनुरोधों को समाहित कर सकते हैं जो ईवेंट को आग लगा सकते हैं। इस प्रकार आपकी क्लाइंट साइड स्क्रिप्ट इस तरह से कार्य कर सकती है जैसे इसे सर्वर से अधिसूचित किया जा रहा है। COMET के साथ कुछ सामान्य सामानों की समीक्षा करें आप शायद क्लाइंट साइड कोड की सहायता के लिए कुछ टूल ढूंढ सकते हैं।

एचटीएमएल 5 इस प्रकार की कार्यक्षमता पर कुछ टिकाऊ प्रयास करता है, लेकिन यदि आप अपने ऐप को पुराने ब्राउज़र पर काम करना चाहते हैं, तो अधिक स्थिर तरीकों का उपयोग करके बेहतर बेहतर, जैसे AJAX ने अपडेट का अनुरोध किया।