2008-08-21 30 views
122

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

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

+0

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

+0

2016 में इस तरह की कोई भी चीज़ करने वाले किसी भी प्रकार के संचार के लिए वेबसाइकिलों को बेहतर विकल्प मिल जाएगा। – Shadow

+0

मुझे यकीन नहीं है कि वहां है। एप्लिकेशन के लिए इसे अवधारणात्मक रूप से सरल बनाने के लिए मुझे लगता है कि आप मतदान अनुरोधों के शीर्ष पर एक परिवहन परत लागू कर सकते हैं, और इस प्रकार आपके आवेदन तर्क से मतदान जिम्मेदारी को हटा सकते हैं। शायद किसी ने भी इसे पहले से ही लागू किया है? संपादित करें: जाहिर है इसे reverse Ajax और Comet कहा जाता है, लेकिन अब तक ऐसा लगता है कि आपको इसे स्वयं लागू करना है। इसके लिए एक जावास्क्रिप्ट लाइब्रेरी, कोई भी? –

उत्तर

65

हां, आप जो खोज रहे हैं वह है COMET http://en.wikipedia.org/wiki/Comet_(programming)। AJAX-push और रिवर्स-एजेक्स के लिए खोज करने के लिए अन्य अच्छे Google शब्द हैं।

9

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

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

0

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

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

1

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

-1

यदि आप jsp पृष्ठों का उपयोग कर रहे हैं तो आप Java Pushlets पर भी देख सकते हैं।

1

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

विकिपीडिया पर Comet article पर देखें, यह शुरू करने के लिए एक अच्छी जगह है।

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

4

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

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

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

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

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

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

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

यदि कोई इस के वास्तविक हल्के कार्यान्वयन प्रदान कर सकता है, तो बढ़िया!

4

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

0

आप हमारे Comet Component को आजमा सकते हैं - हालांकि यह है अत्यधिक प्रयोगात्मक ...!

1

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

1

Meteor Server की जांच करने लायक हो सकता है जो कि कॉमेट के लिए डिज़ाइन किया गया एक वेब सर्वर है। अच्छा demo और इसका उपयोग twitterfall द्वारा भी किया जाता है।

+1

https://www.meteor.com/ पर नया संस्करण और यह व्यापक हो रहा है। –

35

हां, इसे रिवर्स अजाक्स या धूमकेतु कहा जाता है। वेब ब्राउज़र पर रीयल-टाइम में डेटा को धक्का देने के लिए धूमकेतु मूल रूप से दीर्घकालिक HTTP अनुरोधों को खोलने के विभिन्न तरीकों के लिए एक छतरी शब्द है। मैं StreamHub Push Server की सिफारिश करता हूं, उनके पास कुछ अच्छे डेमो हैं और किसी भी अन्य सर्वर की तुलना में शुरू करना बहुत आसान है। एक त्वरित परिचय के लिए Getting Started with Comet and StreamHub Tutorial देखें। आप सामुदायिक संस्करण का उपयोग कर सकते हैं जो मुफ्त में डाउनलोड करने के लिए उपलब्ध है लेकिन 20 समवर्ती उपयोगकर्ताओं तक सीमित है। व्यावसायिक संस्करण अकेले समर्थन के लिए इसके लायक है और आपको SSL और डेस्कटॉप .NET & जावा क्लाइंट एडाप्टर मिलते हैं। सहायता Google Group के माध्यम से उपलब्ध है, नेट पर ट्यूटोरियल का एक अच्छा गुच्छा है और GWT Comet adapter भी है।

+0

निश्चित रूप से जाने का तरीका, एक बार जब आप इसे स्वयं लागू कर लेते हैं तो आपको पता चलता है कि कितना करना है - पुन: कनेक्शन, लंबी-मतदान, स्ट्रीमिंग iframes, क्रॉस-ब्राउज़र समर्थन, HTTPS ... – Corehpf

+1

धूमकेतु क्या मदद करेगा इसकी एक व्याख्या यह उत्तर –

+0

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

5

धूमकेतु निश्चित रूप से आप क्या चाहते हैं। आपकी भाषा/ढांचे की आवश्यकताओं के आधार पर, विभिन्न सर्वर पुस्तकालय उपलब्ध हैं। उदाहरण के लिए, WebSync is an IIS-integrated comet server for ASP.NET/C#/IIS developers, और अन्य स्टैंडअलोन सर्वरों का एक गुच्छा भी है यदि आपको अन्य भाषाओं के साथ कड़े एकीकरण की आवश्यकता है।

0

इस पुस्तकालय https://github.com/SignalR/SignalR जाँच कृपया पता करने के लिए ग्राहकों के लिए डेटा पुश करने के लिए कैसे गतिशील के रूप में यह उपलब्ध

27

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

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 
}; 

Sever साइड से निपटने निर्भर करते हैं:

आप आसानी जावास्क्रिप्ट से कनेक्शन आरंभ कर सकते हैं।

+1

बनाम सर्वर से भेजे गए कार्यक्रम: http://stackoverflow.com/questions/5195452/websockets-vs-server-sent-events-eventsource –

+7

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

4

जावास्क्रिप्ट ऑब्जेक्ट के बाद, एक और मानक, तरीका SSE (Server-Sent Events, also known as EventSource है)।

+0

डब्ल्यू 3 सी स्पेक का नवीनतम संस्करण http://www.w3.org/TR/2009/WD-eventsource-20091029/ https://html.spec.whatwg.org/multipage/comms.html#server- पर रीडायरेक्ट करता है भेजा-घटनाओं –