2015-12-01 3 views
6

मैं एक जर्सी StreamingOutput कि ठीक जब तक हम जर्सी 2.16 करने के लिए उन्नत काम कर रहा था का उपयोग कर रहा है। ये रही चीजें। मेरे StreamingOuput कुछ परिस्थितियों में उत्पादन धीरे-धीरे उत्पन्न करता है। मैं नियमित रूप से डेटा लिखता हूं, लेकिन मैं इसे बहुत धीरे-धीरे लिखता हूं और थोड़ी देर में इसे थोड़ा सा करता हूं। मैं flush()OutputStreamStreamingOutput.write() को हर बार जब मैं किसी भी बाइट्स बारे में पारित कर दिया पर कॉल, लेकिन फ्लश() कोई असर नहीं होता है। OutputStream पर 8K लिखा गया है जब तक तार पर कुछ भी नहीं भेजा जाता है। दुर्भाग्यवश, कुछ परिस्थितियों में, 8K समय लिखा गया है, ग्राहक का समय समाप्त हो गया है।बुला फ्लश() पर जर्सी StreamingOutput कोई प्रभाव नहीं

मैं जर्सी स्रोत से कुछ डाउनलोड किया है और कुछ डिबगिंग के माध्यम से, मुझे लगता है कि OutputStreamwrite() को दिया गया UnCloseableOutputStream जो एक CommittingOutputStream लपेटता है।

CommittingOutputStream में बफरिंग सक्षम है, और इसलिए फ्लश() अनिवार्य रूप से एक नो-ऑप है जब तक प्रतिक्रिया पूरी नहीं होती है (पूर्ण)।

तो, मैं एक अचार में हूँ। मैं एक StreamingOutput (या अन्यथा एक निर्गम धारा पर लिखते) का उपयोग कैसे कर सकते हैं और तार पर बाइट्स भेजने के लिए पहले पूरे प्रतिक्रिया पूरा हो गया है उसे बलपूर्वक? क्या जर्सी के साथ ऐसा करने का कोई और तरीका है? ऐसा करने के लिए मुझे ResponseBuilder पर कोई भी विधि नहीं मिल रही है। मुझे बफरिंग बंद करने का कोई रास्ता नहीं मिल रहा है।

उत्तर

3

बफर के आकार को सेट करने के लिए जर्सी संपत्ति ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER है, लेकिन इसे बदलने से Content-Length शीर्षलेख पर प्रभाव पड़ता है (यदि यह आपके लिए महत्वपूर्ण है)। आपको संपत्ति पर दस्तावेज़ पढ़ना चाहिए।

एक पूर्णांक मान जो सर्वर आकार की प्रतिक्रिया इकाई को बफर करने के लिए उपयोग किए गए बफर आकार को परिभाषित करता है ताकि HTTP आकार "सामग्री-लंबाई" शीर्षलेख का मूल्य निर्धारित किया जा सके।

इकाई आकार कॉन्फ़िगर किया गया बफ़र आकार से अधिक है, बफरिंग रद्द कर दिया जाएगा और इकाई आकार निर्धारित नहीं की जाएगी। शून्य के बराबर या बराबर मान इकाई के बफरिंग को अक्षम करता है।

यह संपत्ति सर्वर की ओर से आउटबाउंड संदेश बफर आकार मान - डिफ़ॉल्ट या "jersey.config.contentLength.buffer" वैश्विक संपत्ति का उपयोग कर वैश्विक कस्टम मान सेट को ओवरराइड करने के लिए उपयोग की जा सकती है।

डिफ़ॉल्ट मान 8192.

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