2013-04-09 8 views
7

मेरे सर्वर संस्करण के रूप में मेरे देव मशीन पर इस प्रकार है:सेटिंग setChunkedStreamingMode सर्वर से डेटा देने में विफल रहता

अपाचे/2.2.21 (Win32) mod_fcgid/2.3.6

मैं HttpURLConnection का परीक्षण कर रहा है क्योंकि मेरे प्रोजेक्ट को आसान स्ट्रीमिंग कैपेबल्टी की आवश्यकता है। मैंने कक्षा का उपयोग करने के तरीके पर @ बलससी से एक महान सारांश पढ़ा है।

Using java.net.URLConnection to fire and handle HTTP requests

मुसीबत मैं वर्तमान में हो रहा है जब setChunkedStreamingMode की स्थापना है। चाहे मैं इसे पर सेट करता हूं, मेरी स्ट्रीम सर्वर को पर नहीं लगती है, जब मेरा सर्वर एपीआई विधि/कनेक्शन कहा जाता है तो डेटा स्ट्रीम खाली होती है। हालांकि, अगर मैं इसे हटा देता हूं, तो यह ठीक काम करता है।

मैं एक ऐसी ही समस्या से किसी अन्य व्यक्ति को देखा है:

Java/Android HttpURLConnection setChunkedStreamingMode not working with all PHP servers

लेकिन कोई वास्तविक संकल्प के साथ। मैं इसे setFixedLengthStreamingMode पर सेट करने में असमर्थ हूं क्योंकि सामग्री (जेसन) लंबाई में परिवर्तनीय है।

यह ठीक नहीं है। मैं संभावित रूप से बहुत बड़ी मात्रा में डेटा स्थानांतरित कर रहा हूं और इसलिए स्मृति में संग्रहीत डेटा नहीं हो सकता है।

मेरा सवाल यह है कि, मैं अच्छा खेलने के लिए setChunkedStreamingMode कैसे प्राप्त कर सकता हूं? क्या यह एक सर्वर सेटअप मुद्दा है या इसे कोड में ठीक किया जा सकता है?

EDIT मैंने अब अपने उत्पादन सर्वर पर अपना कोड परीक्षण किया है और यह कोई समस्या नहीं है। हालांकि मैं अभी भी जानना चाहता हूं कि मेरी स्थानीय मशीन पर मेरा अपाचे सर्वर क्यों विफल रहता है। किसी भी मदद की अभी भी बहुत सराहना की है।

+0

परिभाषित करें "ऐसा नहीं लगता है"। – EJP

+0

@EJP आप बिल्कुल सही हैं कि वास्तव में वाक्यांश की खराब बारी है। वास्तव में यह सर्वर को बनाता है हालांकि, कोई डेटा नहीं है। 'SetChunkedStreamingMode' को हटाए जाने की तुलना में और मेरा डेटा आता है। जहां तक ​​मैं देख सकता हूं, वहां कोई त्रुटि नहीं है। – HGPB

+0

धन्यवाद, अब परिभाषित करें कि "डेटा स्ट्रीम खाली है"। मापने के रूप में कैसे? – EJP

उत्तर

1

इस HTTP शीर्ष लेख जोड़ने का प्रयास करें:

urlConnection.setRequestHeader("Transfer-Encoding","chunked"); 

मैं इस तरह एक समस्या haved: हालांकि मैं chunked HTTP स्ट्रीमिंग मोड सेट दिए गए हैं (urlConnection.setChunkedStreamingMode (0)), यह काम नहीं किया है, लेकिन HTTP डाल इसके ऊपर हेडर ठीक काम करता है।

+7

उत्तर के लिए धन्यवाद, यह 'setChunkedStreamingMode' सेट करने जैसा ही प्रभाव है। कोई डेटा प्राप्त नहीं हुआ है। वास्तव में वास्तव में बहुत अजीब है। मैंने पहले ही यह कोशिश की थी। साथ ही मुझे लगता है कि आपका उत्तर पढ़ना चाहिए: 'urlConnection.setRequestProperty ("ट्रांसफर-एन्कोडिंग", "खंडित") '। – HGPB

+1

यह विश्वास करना मुश्किल है कि आपने जो वर्णन किया है वह वास्तव में आपकी समस्या का समाधान करता है। 'HttpURLConnection' आवश्यक होने पर हेडर स्वयं सेट करता है। – EJP

0

मुझे एक समान समस्या थी। मेरे मामले में यह क्लाइंट सिस्टम था जिसमें एक वायरस स्कैनर स्थापित था। उन स्कैनरों में कभी-कभी पहचान चोरी मॉड्यूल होते हैं जो POST एस को रोकते हैं, शरीर को स्कैन करते हैं और फिर इसे पास करते हैं।

मेरे मामले में BitDefender इसे पास करने से पहले लगभग 5 एमबी कैश किया गया।

यदि पूरा पेलोड कम था तो POST को गैर-खंडित निश्चित लंबाई अनुरोध के रूप में वितरित किया गया था।

0

मुझे HttpURLConnection का उपयोग कर एक ही समस्या थी।के बारे में डिस्कनेक्ट

System.setProperty("http.keepAlive", "false"); 

एपीआई से(): इस संबंध

विज्ञप्ति ताकि अपने संसाधनों हो सकता है बस जोड़ें:

conn.setRequestProperty("connection", "close"); // disables Keep Alive 
अपने कनेक्शन को

या अक्षम सभी कनेक्शनों के लिए या तो पुन: उपयोग या बंद। अन्य जावा कार्यान्वयन के विपरीत, यह आवश्यक रूप से सॉकेट कनेक्शन बंद नहीं करेगा जिसे पुन: उपयोग किया जा सकता है। किसी भी HTTP अनुरोध जारी करने से पहले http.keepAlive सिस्टम प्रॉपर्टी को झूठी पर सेट करके आप सभी कनेक्शन पुन: उपयोग अक्षम कर सकते हैं।

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