2008-10-20 7 views
33

मैं एक साधारण अधिसूचना सेवा पर काम कर रहा हूं जिसका उपयोग वेबसाइट पर सर्फ करने वाले उपयोगकर्ताओं को संदेश देने के लिए किया जाएगा। अधिसूचनाओं को वास्तविक समय में नहीं भेजा जाना चाहिए, लेकिन यदि यह हर 5 मिनट में अधिक बार होता है तो यह बेहतर उपयोगकर्ता अनुभव हो सकता है। क्लाइंट को और से भेजा जा रहा डेटा बहुत बड़ा नहीं है और यह डेटा पुनर्प्राप्त करने के लिए एक सीधी आगे डेटाबेस क्वेरी है।क्लाइंट अधिसूचना, क्या मुझे AJAX पुश या पोल का उपयोग करना चाहिए?

विषय पर अन्य बातचीत पढ़ने में ऐसा लगता है कि एक AJAX पुश के परिणामस्वरूप उच्च सर्वर लोड हो सकता है। चूंकि मैं सर्वर सर्वर को नोटिफिकेशन करने या बस मतदान करने के दौरान लंबे सर्वर देरी को सहन कर सकता हूं।

पुश परिदृश्य को लागू करना ज्यादा कठिन नहीं है और इसलिए मैंने सोचा कि मैं देखूंगा कि राय क्या थी।

आपकी मदद के लिए धन्यवाद।

संपादित करें: मैंने एक साधारण AJAX पुश में देखा है और माइक पुराविस द्वारा इस article पर आधारित एक साधारण डेमो लागू किया है। क्लाइंट लोड शुरुआती संस्करण के लिए लगभग 5k पर काफी कम है और काफी समय तक इस तरह रहने की उम्मीद है।


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

+0

लिंक काम नहीं कर रहा –

+1

लगता लिंक की तरह काफी देर के लिए उपयोगी पहले निधन हो गया प्रदान करते हैं हो सकता है। यहां इंटरनेट अभिलेखागार से एक प्रति है: https://web.archive.org/web/20110611075502/http://uwmike.com:80/articles/2008/01/22/browser-data-push/ – smaclell

उत्तर

5

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

मतदान के साथ मेरा अनुभव यह है कि यदि आपके पास पर्याप्त व्यस्त साइट पर लगातार पर्याप्त मतदान अंतराल है तो आपके वेब सर्वर लॉग वास्तव में मतदान अनुरोधों के साथ बाढ़ आ सकते हैं।

संपादित करें (2017): मैं कहूंगा कि आपके विकल्प अब websockets और लंबे मतदान (किसी अन्य उत्तर में उल्लिखित) के बीच हैं। लंबी मतदान की तरह लगता है कि इस सवाल के आधार पर सही विकल्प हो सकता है कि अधिसूचनाओं को वास्तविक समय में प्राप्त करने की आवश्यकता नहीं है, एक कम मतदान अवधि लागू करने के लिए बहुत आसान होगी और आपके सर्वर पर बहुत कर नहीं लगाना चाहिए । इन दिनों कई अनुप्रयोगों के लिए वेबसाइकिल शांत और बेहतरीन विकल्प हैं, हालांकि इस मामले में ऐसा लगता है कि यह अधिक हो सकता है।

+3

"नहीं केवल यह है कि उपभोग करने जा रहा है ... "क्या। मतदान या धक्का?यह स्पष्ट रूप से नहीं बताता है। –

+2

वाह, यह उत्तर 2008 से था। तब से बहुत कुछ बदल गया है। – mmacaulay

+0

@mmacaulay 2017 में अब आप किस तरह की तकनीकों का सुझाव देंगे?)) –

3

मैं सिर्फ एक मतदान लागू करता हूं क्योंकि यह लिखना आसान लगता है, और इसे सरल रखना बहुत मूल्यवान है।

1

सुनिश्चित नहीं है कि आपने वहां कुछ सीओएमईटी कार्यान्वयन को देखा है (क्या आप AJAX पुश द्वारा इसका मतलब है)।

यदि उपयोगकर्ता साइट पर सर्फ कर रहा है, तो क्या यह वास्तव में सर्वर से जानकारी का अनुरोध नहीं करेगा कि यह अधिसूचना पिग-बैक कर सकती है?

1

मैंने इसे स्वयं नहीं किया है, लेकिन कुछ कहते हैं COMET works and is easier than you think। रेल्स प्लग-इन पर रूबी भी है जिसे Juggernaut कहा जाता है जिसे मैंने अत्यधिक सुना है। दोबारा, मैंने इसका उपयोग नहीं किया है, इसलिए वाईएमएमवी, लेकिन मेरी समझ यह है कि मतदान के मुकाबले बहुत कम संसाधन लेते हैं। मेरा मानना ​​है (क्या कोई पुष्टि कर सकता है?) कि कॉमेट MacRumorsLive.com डब्ल्यूडब्ल्यूडीसी स्टीवनोट्स के लाइव ब्लॉगिंग प्रदान करता है।

1

यह कहना असंभव है कि क्या मतदान करना अधिक महंगे होगा और यह जानने के बिना कि आपके पास कितने ग्राहक होंगे।मैं मतदान की सिफारिश करता हूं क्योंकि:

  • ऐसा लगता है जैसे आप प्रति मिनट एक बार डेटा अपडेट करना चाहते हैं। जब तक अधिसूचनाएं उससे अधिक तेज दर पर पहुंचने में सक्षम न हों, तो पुशिंग का मतलब यह होगा कि आप एक HTTP कनेक्शन खोल रहे हैं लेकिन उस पर बहुत कम गतिविधि देख रहे हैं।
  • मतदान मौजूदा HTTP सम्मेलनों के शीर्ष पर बनाया गया है, इसलिए वेब ब्राउज़र से बात करने वाला कोई भी सर्वर सामान्य अजाक्स अनुरोधों के जवाब देने के लिए पहले से तैयार है। एक धूमकेतु- या फ्लैश सॉकेट-आधारित समाधान की अलग-अलग आवश्यकताएं होती हैं; आपको सर्वर पक्ष पर cometd जैसे कुछ और क्लाइंट-साइड लाइब्रेरी की आवश्यकता होगी जो सर्वर-साइड पुश को ग्रोक करता है।

तो यदि आपको डेटा के प्रवाह और ग्राहकों के पागलपन को प्रबंधित करने के लिए कुछ भारी शुल्क की आवश्यकता है, तो मैं धूमकेतु की सिफारिश करता हूं। लेकिन ऐसा लगता है कि यह मामला नहीं है।

7

दोनों में अलग-अलग आवश्यकताएं हैं और अलग-अलग परिदृश्य हैं।

यदि आपको रीयलटाइम अपडेट की आवश्यकता है, जैसे ऑनलाइन चैट में, पुश जरूरी है।

लेकिन, रीफ्रेश अवधि बड़ी है, क्योंकि यह आपके मामले में है (5 मिनट), तो पूल उपयुक्त समाधान है। पुश, इस मामले में, क्लाइंट और सर्वर दोनों से बहुत सारे संसाधन की आवश्यकता होगी।

युक्ति! उस पृष्ठ को बनाने का प्रयास करें जो पूल को तेज़ और साफ जांचता है, इसलिए यह प्रत्येक अनुरोध में सर्वर में बहुत से संसाधनों का उपभोग नहीं करता है। मैं आमतौर पर क्या करता हूं स्मृति में ध्वज रखना (जैसे एक सत्र चर में) जो कहता है कि पूल खाली है या नहीं ... इसलिए, मैं पूल में केवल तभी दिखता हूं जब यह खाली न हो। जब पूल खाली होता है, जो अधिकतर समय होता है, तो पृष्ठ अनुरोध अत्यंत तेज़ चलता है।

+0

एमएम दिलचस्प। सुझाव के लिए धन्यवाद, मैं शायद इसे एक शॉट दे दूंगा। – smaclell

10

निश्चित रूप से इसका उपयोग कूलर का उपयोग करें। यदि आप केवल सरल अधिसूचनाएं चाहते हैं तो मैं आपके लिए भारी उठाने के लिए StreamHub Push Server जैसे कुछ उपयोग करूंगा। अपनी खुद की अजाक्स पुश कार्यक्षमता का विकास करना बेहद मुश्किल और चट्टानी सड़क है - आपको इसे सभी ब्राउज़रों में काम करना होगा और फिर फायरवॉल और प्रॉक्सी को बनाए रखना होगा ताकि जीवित कनेक्शन आदि को मार सकें ... पहिया का फिर से आविष्कार क्यों करें। इसके अलावा, इसमें 10K से भी कम का कम पदचिह्न है, इसलिए यह आपके लिए प्राथमिकता होने पर उपयुक्त होना चाहिए।

+7

+1 इसे स्वयं विकसित नहीं करने के लिए –

+16

कभी-कभी मुझे लगता है कि मुझे केवल एक ही होना चाहिए जो पहियों बनाने का आनंद लेता है –

+10

एक चीज इसका आनंद ले रही है। एक और बात यह है कि आप इसे समर्पित करने के लिए समय और संसाधन रखते हैं जब आप मौजूदा परियोजनाओं का उपयोग कर सकते हैं :) –

1

अब एक सेवा http://pusherapp.com है जो एक बार और सभी के लिए, इस समस्या को हल करने की कोशिश कर रही है। हो सकता है इसे देखना महंगा न पड़े। (अस्वीकरण: मैं उनके साथ किसी भी तरह से जुड़ा हुआ नहीं हूँ)।

12

मुझे आश्चर्य है कि यहां किसी ने लंबे समय तक मतदान का उल्लेख नहीं किया है। लंबे मतदान का मतलब है कि लंबी अवधि (30-60 सेकंड कहें) के लिए एक खुला कनेक्शन रखना, और एक बार यह बंद हो जाने पर, इसे दोबारा खोलना, और सॉकेट/कनेक्शन को प्रतिक्रियाओं के लिए सुनना। इसके परिणामस्वरूप कम कनेक्शन (लेकिन लंबे समय तक) होते हैं, और इसका मतलब है कि प्रतिक्रिया लगभग तत्काल हैं (कुछ को नए मतदान कनेक्शन की प्रतीक्षा करनी पड़ सकती है)। मैं इसे नोडजेएस जैसी प्रौद्योगिकियों के संयोजन में जोड़ना चाहता हूं, इसका परिणाम बहुत ही कुशल और संसाधन-प्रकाश समाधान में होता है, जो सभी प्रमुख ब्राउज़रों और संस्करणों में 100% ब्राउज़र संगत है, और धूमकेतु या किसी भी अतिरिक्त तकनीक की आवश्यकता नहीं है फ्लैश।

मुझे पता है यह एक पुराने सवाल है, लेकिन सोचा था कि यह अभी भी इस जानकारी :)

+0

यदि आप पुश लिंक देखते हैं तो यह अनिवार्य रूप से एक लंबा मतदान है जो धीरे-धीरे कॉलर को डेटा को ट्रिकल्स करता है जो प्रभावी रूप से लंबे समय तक मतदान कर रहा है लेकिन जब वह पुश की नकल करने के लिए तैयार होता है तो तुरंत डेटा भेज सकता है। – smaclell

+0

आह कोई चिंता नहीं - मैंने इसे किसी भी resopnses में उल्लेख नहीं किया है, जो मुझे अजीब मिला :) – Oddman

+0

@Oddman क्या एक स्वीकृत उत्तर और लांग पोलिंग में वर्णित पोलिंग के बीच कोई अंतर है? –

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