2016-05-08 6 views
5

मेरी परियोजना में, निजी चैट और संदेश अधिसूचना जैसी विशेषताएं हैं। संदेश अधिसूचना यह बताएं कि क्या कोई नया अपठित संदेश है या नहीं। server मॉडल, सर्वर नए अनुरोधों के लिए सुनने चाहिए -ग्राहक को लगातार AJAX अनुरोध के बिना सर्वर से अपडेट कैसे प्राप्त होते हैं?


कि प्राप्त करने के लिए, यह विचार है कि मेरे दिमाग में आया

की तरह एक client में है। इसी तरह, मैंने सोचा कि नए संदेशों के बारे में जानकारी प्राप्त करने के लिए सर्वर को सुनने के लिए कुछ तंत्र होना चाहिए। चूंकि मुझे AJAX पता है, मैंने ajax अनुरोध 2seconds के अंतराल के साथ किया था।

ajax अनुरोध जबकि क्रोम में यह जाँच से नीचे की तरह कुछ हो जाएगा। Ajax requests under network section in chrome

लेकिन मैं बाद में सोचा कि, StackOverflow एक ही चाल का उपयोग करना चाहिए अगर यह केवल विचार ऐसा करने के लिए, क्योंकि वे सूचनाएं अद्यतन/अतुल्यकालिक रूप से जानकारी वोट था।

क्रोम में अपने AJAX अनुरोधों की जांच, यह पूरी तरह से खाली था।

मुझे यह जानने की ज़रूरत है कि इसे लगातार AJAX अनुरोधों का उपयोग किए बिना कैसे प्राप्त किया जा सकता है (जो सर्वर पर लोड बढ़ाएगा)।
सबसे कुशल तकनीक के साथ एक सरल उदाहरण सीखने के लिए बहुत उपयोगी होगा।

उत्तर

5

यह Comet के रूप में जाना जाता है, और वहाँ इसे प्राप्त करने के कई तरीके हैं:

  • मतदान (तुम क्या कर रहे - नियमित अंतराल में जाँच अगर वहाँ एक संदेश है)
  • लंबी मतदान (बनाने एक अनुरोध तक वहां एक संदेश है कि कोई प्रतिक्रिया नहीं करता है)
  • स्ट्रीमिंग (एक स्क्रिप्ट कनेक्शन है कि निष्पादन जावास्क्रिप्ट अपडेट संवर्द्धित भेजता है)
  • WebSockets (सबसे अच्छा विकल्प है, अगर समर्थित खोलने - के लिए सभी बाकी थे हैक्स क्या Websockets फिन थे सहयोगी को संबोधित किया गया)

उन्हें कार्यान्वित करना मुश्किल है और यहां से कई पुस्तकालयों को चुनने के लिए चुना गया है जो आपके लिए सही तरीके से लागू होते हैं (उदा। Socket.IO)।

संपादित करें:

सबसे कारगर तकनीक के साथ एक साधारण उदाहरण सीखने के लिए बहुत उपयोगी होगा।

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

भी ध्यान रखें कि आपको लगता है कि धूमकेतु से निपटने के लिए सुसज्जित है एक सर्वर की जरूरत है: उदाहरण के लिए सॉकेट.आईओ नोड.जेएस के साथ काम करता है। उदाहरण के लिए, वे डिफ़ॉल्ट अपाचे के साथ काम नहीं करेंगे।

+1

मैं अब क्रोम डेवलपर कंसोल थोड़ी देर के लिए खुला किया है और मैं नेटवर्क दृश्य में कुछ भी नया नहीं दिख रहा। क्या इनमें से कोई भी विकल्प कुछ अलग करेगा जो नेटवर्क यातायात को इस तरह से दिखने से रोकता है? – Joel

+1

@ जोएल उत्तर में दिए गए लिंक से _ "धूमकेतु एक वेब एप्लिकेशन मॉडल है जिसमें एक लंबे समय से आयोजित HTTP अनुरोध वेब सर्वर को ब्राउज़र को डेटा को धक्का देने की अनुमति देता है, ब्राउज़र स्पष्ट रूप से अनुरोध किए बिना।" _ क्योंकि धूमकेतु एक है रिवर्स AJAX। प्रतिक्रिया सर्वर की तरफ से है और ब्राउज़र (क्लाइंट) द्वारा शुरू नहीं की गई है। तो मुझे लगता है कि अनुरोध वेब डेवलपर कंसोल में नहीं दिखाए जाएंगे। – Lucky

+2

@ भाग्यशाली: यह बिल्कुल काम नहीं करता है। क्लाइंट क्लाइंट से पहले सर्वर से संपर्क किए बिना अनुरोध शुरू नहीं कर सकता है। – Amadan

3

क्या @Amadan उल्लेख बिल्कुल ठीक है लेकिन StackOverflow और अन्य StackExchange वेबसाइट मुख्य रूप से आधुनिक ब्राउज़रों के लिए WebSocket (जो एचटीएमएल 5 और WebSocket समर्थन करता है) का उपयोग करें।

ओपन डेवलपर्स क्रोम में कंसोलनेटवर्क टैब पर जाएं, और डब्ल्यूएस या वेबसॉकेट फ़िल्टर करें और पृष्ठ को रीफ्रेश करें। आप नीचे दिए गए की तरह कुछ देखेंगे:

enter image description here

+1

बिल्कुल। यह जवाब स्वीकार किया जाना चाहिए। +1 –

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

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