2013-09-23 8 views
6

मैं वर्तमान में बाइनरी डेटा के साथ आंशिक एक्सएचआर प्रतिक्रियाओं को पढ़ने की संभावना पर शोध कर रहा हूं। हमारा वर्तमान दृष्टिकोण 'प्रतिक्रिया टेक्स्ट' संपत्ति और बेस 64 एन्कोडिंग पर आधारित है। जाहिर है, यह इष्टतम से बहुत दूर है।बाइनरी डेटा के लिए आंशिक एक्सएचआर प्रतिक्रिया पढ़ने, संभव है?

हम एक्सएचआर का उपयोग करके आंशिक ब्लॉब/ऐरेबफर प्रतिक्रियाओं को कैसे पढ़ सकते हैं? जब मैं क्रोम में कोशिश करता हूं, तो पूरे ArrayBuffer/Blob को उपलब्ध कराया जाता है जब तैयारस्टेट = 4, लेकिन इससे पहले नहीं।

संक्षेप में, मुझे लगता है कि:

  • पढ़ना एक्सएचआर के responseText संपत्ति: उत्तर readyState = 4 से पहले पढ़ा जा सकता है, और हम वापस ग्राहक के लिए बाइनरी डेटा इनकोडिंग बेस 64 स्ट्रीम कर सकते हैं
  • पढ़ना एक्सएचआर के responseType = 'arraybuffer' के साथ प्रतिक्रिया संपत्ति: नहीं आंशिक प्रतिक्रिया पढ़ने, लेकिन पूरे बफर उपलब्ध कराया गया है जब readyState = 4

मैं कुछ यहाँ याद आ रही है? आंशिक द्विआधारी प्रतिक्रियाओं को पढ़ने के लिए हम क्या दृष्टिकोण ले सकते हैं?

उत्तर

3

अपनी आंखें the fetch API पर रखें, वर्तमान में supported by Firefox and Chrome पर।

+0

धन्यवाद! ऐसा करने के तरीके की तरह दिखता है। एक अतिरिक्त लाभ के रूप में, हमारे मामले में, हम गैर-सहायक ब्राउज़र के लिए आसानी से मानक XHR अनुरोध का उपयोग कर सकते हैं। – bjornl

5

एक तरीका है, हालांकि यह अभी तक मानक नहीं है। फ़ायरफ़ॉक्स आपको XHR पर "moz-blob", "moz-chunked-text" या "moz-chunked-arraybuffer" पर responseType सेट करने की अनुमति देता है, जो आपके लिए काम करता है। फिर, जब आप progress ईवेंट सुनते हैं, तो आप आंशिक डेटा तक पहुंचने में सक्षम होंगे। एमडीएन में here और here पर अधिक जानकारी है।

क्रोम Streams API का समर्थन करेगा, लेकिन यह not ready yet है। फ़ायरफ़ॉक्स भी eventually इसका समर्थन कर सकता है। मैंने कहीं पढ़ा है कि आईई पहले से ही करता है, हालांकि मुझे इसकी पुष्टि करने के लिए कोई आधिकारिक दस्तावेज नहीं मिल रहा है।

+0

उत्तर के लिए धन्यवाद। हमने पहले ही हमारी स्ट्रीमिंग/चंकिंग तंत्र को लागू कर लिया है। यह बेस 64 एन्कोडिंग और प्रतिक्रिया टाइप = टेक्स्ट पर आधारित है, क्योंकि यह आज सबसे व्यापक रूप से समर्थित समाधान प्रतीत होता है। – bjornl

+0

बाइनरी मल्टीप्लेक्ड वेबसॉकेट संचार पर अधिक निर्भर होने के तरीके पर हमारे दृष्टिकोण को स्विच कर सकता है, जो एक मालिकाना प्रोटोकॉल के अनुसार खंडित है। कुशल मल्टीप्लेक्सिंग की अनुमति देने के लिए भाग को अपेक्षाकृत छोटा और अनुमानित आकार होना चाहिए, लेकिन विश्वसनीय रूप से डिस्कनेक्शन का पता लगाने में सक्षम होना चाहिए। अब के लिए एक व्यवहार्य विकल्प लगता है। – bjornl

+0

हाँ, वेबसाइट्स एक और अच्छा विकल्प हैं, मानते हैं कि आपके पास सर्वर है। – brianchirls

1

एक्सएचआर प्रतिस्थापन के रूप में उपयोग करने के लिए सबसे अच्छी एपीआई पठनीय स्ट्रीम के साथ लाती है।

यह यहां समझाया गया है: https://developers.google.com/web/fundamentals/primers/async-functions#example_streaming_a_response

क्रोम पहले से ही समर्थन करता है। फ़ायरफ़ॉक्स इसे लागू करता है लेकिन इसे पल के लिए मैन्युअल रूप से सक्रिय किया जाना चाहिए (इसे भविष्य के संस्करण में डिफ़ॉल्ट रूप से सक्रिय किया जाएगा)। हालांकि यह एक्टिवेशन की प्रतीक्षा में, फायरफॉक्स अमानक प्रतिक्रिया प्रकार के साथ एक्सएचआर लागू करता moz-chunked-arraybuffer

पुस्तकालय https://www.npmjs.com/package/fetch-readablestream एक API कि इन दोनों तरीकों को लागू करता है प्रस्ताव है। यह https://www.npmjs.com/package/web-streams-polyfill का उपयोग करता है।

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