क्या वेब सर्वर से ब्राउज़र तक PUSH डेटा का कोई रास्ता है?


134

बेशक मैं अजाक्स से अवगत हूं, लेकिन अजाक्स के साथ समस्या यह है कि ब्राउज़र को सर्वर को अक्सर यह पता लगाना चाहिए कि क्या नया डेटा है। इससे सर्वर लोड बढ़ता है।

क्या सर्वर पर बार-बार मतदान करने के अलावा कोई बेहतर तरीका (अजाक्स का उपयोग करने के अलावा) है?


1
मुझे यकीन नहीं है कि वहाँ है आवेदन के लिए वैचारिक रूप से सरल बनाने के लिए मुझे लगता है कि आप मतदान अनुरोधों के शीर्ष पर एक परिवहन परत को लागू कर सकते हैं, और इस प्रकार अपने आवेदन तर्क से मतदान की जिम्मेदारी को हटा सकते हैं। शायद किसी ने भी पहले से ही इसे लागू किया? <strong> संपादित करें: </ strong> जाहिरा तौर पर इसे <a href=" en.wikipedia.org/wiki/Reverse_Ajax"> रिवर्स अजाक्स कहा जाता है और <a href = " en.wikipedia.org/wiki/Comet_ ( प्रोग्रामिंग) "> धूमकेतु </ a >, लेकिन अब तक ऐसा लगता है कि आपको इसे स्वयं लागू करना होगा। इसके लिए एक जावास्क्रिप्ट पुस्तकालय, कोई भी?
एंडर्स सैंडविग

1
@ राचल - लाइव अपडेट ताकि आप देख सकें कि दूसरे क्या कर रहे हैं। StackOverflow जैसी साइटों के लिए और Google डॉक्स जैसी सहयोग के लिए वेब अनुप्रयोगों के लिए अच्छा है।
इटाई बार-हैम

1
2016 में इस तरह का काम करने वाला कोई भी व्यक्ति शायद इस प्रकार के संचार के लिए एक बेहतर विकल्प होगा।
छाया

जवाबों:



37

हां, इसे रिवर्स अजाक्स या धूमकेतु कहा जाता है । धूमकेतु मूल रूप से एक वेब ब्राउज़र के लिए वास्तविक समय में डेटा को पुश करने के लिए लंबे समय तक रहने वाले HTTP अनुरोधों को खोलने के विभिन्न तरीकों के लिए एक छाता शब्द है। मैं स्ट्रीमहब पुश सर्वर की सलाह दूंगा , उनके पास कुछ शांत डेमो हैं और किसी भी अन्य सर्वर की तुलना में इसे शुरू करना बहुत आसान है। की जाँच करें धूमकेतु और StreamHub ट्यूटोरियल के साथ प्रारंभ करना एक त्वरित परिचय के लिए। आप सामुदायिक संस्करण का उपयोग कर सकते हैं जो मुफ्त में डाउनलोड करने के लिए उपलब्ध है लेकिन 20 समवर्ती उपयोगकर्ताओं तक सीमित है। वाणिज्यिक संस्करण अकेले समर्थन के लिए इसके लायक है और आपको एसएसएल और डेस्कटॉप .NET और जावा क्लाइंट एडेप्टर मिलते हैं। सहायता Google समूह के माध्यम से उपलब्ध हैवहाँ नेट पर ट्यूटोरियल का एक अच्छा गुच्छा है और एक GWT धूमकेतु अनुकूलक भी है।


1
निश्चित रूप से जाने का रास्ता, एक बार जब आप इसे स्वयं लागू करने में लग जाते हैं तो आपको एहसास होता है कि कितना कुछ करना है - पुन:
संयोजन

2
धूमकेतु इस उत्तर में मदद करने के लिए क्या बताता है
केविन मोंक

1
@ शातिर: एक त्वरित स्पष्टीकरण जोड़ा। अन्य उत्तरों में विकिपीडिया लेख के लिंक हैं।
नोसराम

32

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

आप आसानी से जावास्क्रिप्ट से कनेक्शन शुरू कर सकते हैं:

var ws = new WebSocket("ws://your.domain.com/somePathIfYouNeed?args=any");
ws.onmessage = function (evt) 
{
  var message = evt.data;
  //decode message (with JSON or something) and do the needed
};

गंभीर साइड हैंडलिंग आपके टेनकोलॉजी स्टैक पर निर्भर करता है।


2
बनाम सर्वर द्वारा भेजी गई घटनाएं: stackoverflow.com/questions/5195452/…
Ciro Santilli 病:::

8
मैं पूरी तरह से सहमत हूं ... द्वि-दिशात्मक संचार के लिए HTTP का उपयोग REST कॉल में सोचने के लिए है जैसा कि कछुए के गोले पर मारियो कूदने के लिए ... यह पागलपन है। आपको अनुरोध करने की आवश्यकता नहीं है और सरल बटन के लिए प्रतिक्रियाओं का इंतजार लोगों को धक्का देता है .... आप बस नहीं। HTTP एक डॉक्यूमेंट प्रोटोकॉल है। हाइपरटेक्स्ट ट्रांसफ़र प्रोटोकॉल। Ajax Push एक पागलपनपूर्ण तरीका है HTTP को दरकिनार करने का जो कि WebSocket डिज़ाइन द्वारा करता है। नासमझ होना बंद करें और नौकरी के लिए सही उपकरण का उपयोग करें।
निक स्टील

आप वास्तव में दीर्घवृत्त पसंद करते हैं, और कभी-कभी चार बिंदुओं का एक नया रूप जिसे मैं "दीर्घवृत्त" कहूंगा!
imbatman

10

धूमकेतु में देखें (इस तथ्य पर एक स्पूफ है कि अजाक्स एक सफाई एजेंट है और इसलिए धूमकेतु है) जो मूल रूप से "रिवर्स मोम" है। ज्ञात रहे कि यह सूचना प्राप्त करने के लिए प्रत्येक उपयोगकर्ता के लिए लंबे समय तक सर्वर कनेक्शन की आवश्यकता होती है ताकि आपके ऐप लिखते समय प्रदर्शन निहितार्थ के बारे में पता हो।

http://en.wikipedia.org/wiki/Comet_(programming)


6

धूमकेतु निश्चित रूप से आप क्या चाहते हैं। आपकी भाषा / रूपरेखा आवश्यकताओं के आधार पर, विभिन्न सर्वर लाइब्रेरी उपलब्ध हैं। उदाहरण के लिए, WebSync ASP.NET/C#/IIS डेवलपर्स के लिए IIS-एकीकृत धूमकेतु सर्वर है , और अन्य स्टैंडअलोन सर्वरों का एक समूह है, साथ ही यदि आपको अन्य भाषाओं के साथ सख्त एकीकरण की आवश्यकता है।


5

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

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

हमने जो कुछ किया वह सर्वर पर एक छोटी सी सेवा को लागू करने के लिए था जो फोन-सिस्टम से बात करता है, नई घटनाओं की प्रतीक्षा करता है और स्थिति की एक तस्वीर रखता है। यह सेवा एक छोटा वेबसर्वर प्रदान करती है।

हमारे वेब-क्लाइंट HTTP पर इस वेबसर्वर से जुड़ते हैं और अंतिम फोटो (एक्सएमएल में कोडित) के लिए पूछते हैं, इसे प्रदर्शित करता है और फिर से जाता है, नई फोटो के लिए पूछता है। इस बिंदु पर वेबसर्वर कर सकते हैं:

  • अगर कोई है तो नई फोटो लौटाएं
  • कुछ सेकंड के लिए क्लाइंट को ब्लॉक करें (हमारे सेटअप में 30) किसी घटना के इंतज़ार में और तस्वीर बदलने के लिए। यदि उस समय कोई घटना उत्पन्न नहीं हुई थी, तो यह उसी फ़ोटो को लौटाता है, केवल कनेक्शन को जीवित रहने की अनुमति देता है और क्लाइंट को टाइमआउट नहीं करता है।

इस तरह, जब ग्राहक मतदान करते हैं, तो इसे 0 से 30 सेकंड अधिकतम में प्रतिक्रिया मिलती है। यदि कोई नई घटना पहले ही उत्पन्न हो गई थी, तो वह तुरंत मिल जाती है), अन्यथा यह तब तक अवरुद्ध हो जाती है जब तक कि नई घटना उत्पन्न नहीं हो जाती।

यह मूल रूप से मतदान है, लेकिन वेबसर्वर को गर्म करने के लिए यह कुछ हद तक स्मार्ट मतदान है। यदि धूमकेतु आपका उत्तर नहीं है, तो मुझे यकीन है कि इसे एक ही विचार का उपयोग करके लागू किया जा सकता है लेकिन बेहतर परिणाम के लिए JSON में अधिक बड़े पैमाने पर AJAX या कोडिंग का उपयोग किया जा सकता है। यह पूर्व-AJAX युग के लिए डिज़ाइन किया गया था, इसलिए इसमें सुधार के लिए बहुत सारे कमरे हैं।

अगर कोई इस का एक वास्तविक हल्के कार्यान्वयन प्रदान कर सकते हैं, महान!


5

धूमकेतु का एक दिलचस्प विकल्प फ्लैश में सॉकेट्स का उपयोग करना है।


5

फिर भी एक और, मानक, तरीका है SSE (सर्वर-सेंटेड इवेंट, जिसे जावास्क्रिप्ट ऑब्जेक्ट के बाद EventSource के रूप में भी जाना जाता है )।




2

अन्य विधियां हैं। यकीन नहीं होता कि वे आपकी स्थिति में "बेहतर" हैं। आपके पास एक जावा एप्लेट हो सकता है जो पेज लोड पर सर्वर से जुड़ता है और सर्वर द्वारा भेजे जाने वाले सामान की प्रतीक्षा करता है। स्टार्ट-अप पर यह थोड़ा धीमा होगा, लेकिन बिना किसी मतदान के ब्राउज़र को सर्वर से डेटा प्राप्त करने की अनुमति होगी।


2

आप सर्वर पर BlazeDS या LiveCycle के साथ क्लाइंट पर फ्लैश / फ्लेक्स एप्लिकेशन का उपयोग कर सकते हैं। RTMP कनेक्शन का उपयोग करके ग्राहक को डेटा पुश किया जा सकता है। ज्ञात हो कि RTMP एक गैर मानक पोर्ट का उपयोग करता है। लेकिन पोर्ट आसानी से बंद होने पर आप आसानी से मतदान में वापस आ सकते हैं।


2

यह सुनिश्चित करना संभव है कि आप लगातार HTTP कनेक्शन के उपयोग के माध्यम से क्या लक्ष्य कर रहे हैं।

की जाँच करें धूमकेतु लेख विकिपीडिया पर अधिक, एक अच्छी जगह शुरू करने के लिए बहुत कुछ है।

आप अधिक जानकारी प्रदान नहीं कर रहे हैं, लेकिन यदि आप किसी प्रकार की ईवेंट-चालित साइट (a'la digg जासूस) या कुछ की तर्ज पर निर्माण कर रहे हैं, तो शायद आप एक छिपे हुए IFRAME को कार्यान्वित करने के लिए देख रहे हैं, जो कनेक्ट करता है एक url जहां कनेक्शन कभी बंद नहीं होता है और फिर आप अपडेट करने के लिए सर्वर से क्लाइंट तक स्क्रिप्ट-टैग पुश करेंगे।



1

एक बार सर्वर से कनेक्शन खोले जाने के बाद इसे खुला रखा जा सकता है और सर्वर बहुत समय पहले पुश कर सकता है जब मैंने इसका उपयोग multipart/x-mixed-replaceकिया था लेकिन IE में यह काम नहीं किया।

मुझे लगता है कि आप मतदान के साथ चतुर चीजें कर सकते हैं जो सामग्री को अपरिवर्तित हेडर न भेजकर धक्का देने जैसा काम करता है लेकिन कनेक्शन को खुला छोड़ देता है लेकिन मैंने ऐसा कभी नहीं किया है।





हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.