मैंने एक लंबे मतदान कनेक्शन को लागू किया है ताकि मुझे टॉमकैट वेब सर्वर और फ्रंटएंड पर मानक जावास्क्रिप्ट का उपयोग करके सर्वर-साइड पुश (धूमकेतु) करने की अनुमति मिल सके। कनेक्शन जारी रखने के लिए, मेरे पास एक सरल रख-रखाव लूप है जो अंतिम बार पूरा होने/विफल होने पर एक नया अनुरोध शुरू करता है।लंबे मतदान के साथ समस्याएं XMLHttpRequests और intermittent नेटवर्क कनेक्शन
उस समय का विशाल बहुमत, यह कनेक्शन पूरी तरह से ठीक काम करता है और जैसा कि मैं उम्मीद करता हूं जिंदा रहता है। लेकिन, मैंने देखा है कि जब उपयोगकर्ता का इंटरनेट कनेक्शन गिर जाता है (उदा। वे वीपीएन से डिस्कनेक्ट करते हैं, अपने ईथरनेट को अनप्लग करते हैं, आदि) और मेरे पास सर्वर पर लंबित XMLHttpRequest है, तो मुझे विफलता का कोई संकेत नहीं मिलता है। इस वजह से, कनेक्शन चुपचाप मर जाता है, और मुझे नहीं पता कि यह तब तक हुआ जब तक कि मैं लगातार कनेक्शन का परीक्षण करने के लिए सर्वर को अनुरोध नहीं भेजता (जो लंबे मतदान का उपयोग करने के उद्देश्य को हराने के लिए लगता है)।
यहाँ अनुरोध उद्देश्य यह है कि मैं क्रोम में देखते हैं जब यह इस मूक मौत मर जाता है:
request: XMLHttpRequest
onabort: function()
onerror: function()
onload: null
onloadend: null
onloadstart: null
onprogress: null
onreadystatechange: function()
readyState: 1
response: ""
responseText: ""
responseType: ""
responseXML: null
status: [Exception: DOMException]
statusText: [Exception: DOMException]
upload: XMLHttpRequestUpload
withCredentials: false
मैं तीन श्रोताओं है (onabort, onerror, onreadystatechange) सेटअप संदेश सचेत करने के लिए अगर वे कभी निकाल दिया, लेकिन जब भी मैं सर्वर से अपना कनेक्शन लेता हूं तब मुझे कुछ भी नहीं मिलता है। यहाँ कैसे मैं अनुरोध बनाने हूँ:
var request = new XMLHttpRequest();
//url is just the url to my servlet to handle this
request.open("GET", url, true);
//handlestatechange is just my standard handling code
//that I've put an alert at the top of
request.onreadystatechange = handleStateChange;
request.onerror = function()
{
alert("We encountered an error");
}
request.onabort = function()
{
alert("I've had an abortion");
}
request.send(null);
यह इस तरह लगता है एक सुंदर मानक स्थिति होगी, लेकिन मैं कैसे एक लंबे मतदान कनेक्शन वियोग की इस तरह से उबरने के लिए अनुमति देने के लिए पर कोई बातचीत नहीं देखा है ।
क्या मैं कुछ गलत कर रहा हूं? क्या इस मुद्दे को खारिज करने वाले लंबे मतदान/धूमकेतु करने के लिए कुछ और मानक दृष्टिकोण है?
इस के साथ किसी भी मदद की सराहना की जाएगी, धन्यवाद
उत्तर के लिए धन्यवाद। यह समाधानों का सेट कम या कम है जिसे मैंने अब तक देखा था। मुझे लगता है कि मुझे संभवतः टाइमआउट मूल्य को कम करने और कनेक्टिविटी सुनिश्चित करने के लिए नियमित दिल की धड़कन का उपयोग करने के आपके विचार को पसंद है। मैंने पहले xhr.abort() का उपयोग करने का प्रयास किया है, लेकिन टॉमकैट साइड पर कुछ वास्तव में अजीब बग पाए गए हैं ([एपॉलवाइट सीपीयू को 100% तक बढ़ा सकता है और जब तक मैं टॉमकैट को पुनरारंभ नहीं करता तब तक ठीक नहीं होगा] (https: // मुद्दों। apache.org/jira/browse/DIRMINA-678)) – dallas