अपडेट करें
जैसा कि मैंने इस पर आगे बढ़ना जारी रखा है, मुझे लगता है कि यह याद रखना उचित है कि यह उत्तर 4 साल पुराना है। वेब वास्तव में तेज़ गति से बढ़ा है, इसलिए कृपया इस उत्तर के बारे में ध्यान रखें।
मेरे पास हाल ही में एक ही मुद्दा था और इस विषय के बारे में शोध किया।
दिए गए समाधान को लंबे मतदान कहा जाता है, और इसे सही ढंग से उपयोग करने के लिए आपको यह सुनिश्चित करना होगा कि आपके AJAX अनुरोध में एक "बड़ा" समय समाप्त हो गया है और हमेशा वर्तमान समाप्त होने के बाद यह अनुरोध करना चाहिए (समय समाप्त, त्रुटि या सफलता)।
लंबा मतदान - ग्राहक
यहाँ, कोड को छोटा रखने के लिए, मैं jQuery का उपयोग करूंगा:
function pollTask() {
$.ajax({
url: '/api/Polling',
async: true, // by default, it's async, but...
dataType: 'json', // or the dataType you are working with
timeout: 10000, // IMPORTANT! this is a 10 seconds timeout
cache: false
}).done(function (eventList) {
// Handle your data here
var data;
for (var eventName in eventList) {
data = eventList[eventName];
dispatcher.handle(eventName, data); // handle the `eventName` with `data`
}
}).always(pollTask);
}
यह याद रखना महत्वपूर्ण है कि ( jQuery डॉक्स से ):
JQuery 1.4.x और नीचे, XMLHttpRequest ऑब्जेक्ट अमान्य स्थिति में होगा यदि अनुरोध समय से बाहर हो; किसी भी वस्तु सदस्यों तक पहुँच एक अपवाद फेंक सकता है। फ़ायरफ़ॉक्स 3.0+ में, स्क्रिप्ट और JSONP अनुरोधों को टाइमआउट द्वारा रद्द नहीं किया जा सकता है; स्क्रिप्ट समयावधि के बाद आने पर भी चलेगी।
लंबा मतदान - सर्वर
यह किसी विशिष्ट भाषा में नहीं है, लेकिन यह कुछ इस तरह होगा:
function handleRequest () {
while (!anythingHappened() || hasTimedOut()) { sleep(2); }
return events();
}
यहां, hasTimedOut
यह सुनिश्चित कर लें कि आपका कोड हमेशा के लिए प्रतीक्षा नहीं करता है, और anythingHappened
यह जांच करेगा कि क्या कोई भी ईवेंट खुश है। sleep
अन्य सामान लेना-देना नहीं होता है, जबकि अपनी धागा प्रसारित करने की है। events
JSON प्रारूप में घटनाओं की एक शब्दकोश (या किसी अन्य डेटा संरचना आप पसंद कर सकते हैं) वापस आ जाएगी (या किसी अन्य आप पसंद करते हैं)।
यह निश्चित रूप से समस्या को हल करता है, लेकिन, यदि आप मापनीयता और पूर्णता के बारे में चिंतित हैं जैसा कि मैं शोध कर रहा था, तो आप एक और समाधान पर विचार कर सकते हैं जो मुझे मिला।
उपाय
सॉकेट्स का उपयोग करें!
क्लाइंट की ओर से, किसी भी संगतता समस्याओं से बचने के लिए, सॉकेट का उपयोग करें । यह सीधे सॉकेट का उपयोग करने की कोशिश करता है, और सॉकेट उपलब्ध नहीं होने पर अन्य समाधानों में कमियां होती हैं।
सर्वर साइड पर एक सर्वर (उदाहरण के NodeJS का उपयोग कर बनाने के यहाँ )। क्लाइंट सर्वर के साथ बनाए गए इस चैनल (पर्यवेक्षक) की सदस्यता लेगा। जब भी कोई अधिसूचना भेजनी होती है, तो उसे इस चैनल में प्रकाशित किया जाता है और सबस्क्रिप्ट (क्लाइंट) को सूचित किया जाता है।
यदि आपको यह समाधान पसंद नहीं है, तो APE ( Ajax Push Engine ) आज़माएं ।
आशा है कि मैंने मदद की।