2009-04-27 11 views
6

एचटीपी लिस्टनर आपको प्रतिक्रिया स्ट्रीम देता है, लेकिन फ्लश को कॉल करने का मतलब कुछ नहीं है (और स्रोतों से यह स्पष्ट है, क्योंकि यह वास्तव में कुछ भी नहीं कर रहा है)। HTTP एपीआई के अंदर खुदाई से पता चलता है कि यह एचटीपी लिस्टनर की एक सीमा है।कैसे HttpListener प्रतिक्रिया धारा फ्लश करने के लिए?

कोई भी जानता है कि एचटीपी लिस्टनर की प्रतिक्रिया धारा को कैसे फ़्लश करना है (प्रतिबिंब या अतिरिक्त पी/आमंत्रण के साथ हो सकता है)?

अपडेट: यदि आपके पास फ्लश विकल्प या बफर आकार को परिभाषित करने की क्षमता नहीं है तो आप http स्ट्रीम को कुछ भी स्ट्रीम नहीं कर सकते हैं।

उत्तर

2

फ्लश केवल अधिकांश सिस्टम में काम करता है। नेटस्पेस स्थानांतरण-एन्कोडिंग को चुने जाने पर सेट किया जाता है, अन्यथा पूरा अनुरोध वापस कर दिया जाता है और फ्लश वास्तव में कुछ भी नहीं करता है। HttpWebResponse के साथ काम करते समय कम से कम यही मैंने अनुभव किया है।

+0

प्रश्न यह नहीं है कि यह क्यों काम नहीं कर रहा है ... लेकिन http स्ट्रीमिंग की कल्पना करें जहां जल्द से जल्द कुछ भेजना महत्वपूर्ण है। चंकित डेटा यहां एक विकल्प नहीं है। HttpListener वास्तव में अनुरोध समाप्त करने से पहले कुछ भेज रहा है, लेकिन यह बहुत बड़ा अपरिवर्तनीय बफर का उपयोग कर रहा है। – Mash

+0

और बीटीडब्ल्यू, एएसपी.NET ठीक है जब आप इसे पूछ रहे हैं ... एएसपी.नेट को पूर्ण पोस्ट निकाय से पहले इनपुटस्ट्रीम सामग्री प्राप्त करने के लिए कुछ हैक्स की आवश्यकता होती है, लेकिन आउटपुटस्ट्रीम ठीक काम करता है। – Mash

+1

HTTP वास्तव में एक स्ट्रीमिंग प्रोटोकॉल नहीं है। यह इंटरनेट पर पाठ संचारित करने के लिए है, इस प्रकार नाम हाइपर-टेक्स्ट ट्रांसमिशन प्रोटोकॉल। यदि आप स्ट्रीमिंग चाहते हैं तो मैं एक सॉकेट का सुझाव दूंगा। या आपके नियंत्रण के लिए छोटे पर्याप्त पैकेट में स्ट्रीमिंग सामग्री पर थोड़ा बेहतर कुछ। –

0

मैंने अभी तक यह कोशिश नहीं की है, लेकिन स्ट्रीमिंग प्रतिक्रियाओं के लिए एक अलग टीसीपी सर्वर लिखने के बारे में कैसे? फिर HttpListener से अनुरोध को "आंतरिक" टीसीपी सर्वर पर अग्रेषित करें। इस रीडायरेक्ट का उपयोग करके आप डेटा को वापस स्ट्रीम करने में सक्षम हो सकते हैं।

इसे फ़्लश करने के लिए, वे केवल एक तरीका है जिसे मैं वास्तव में निपटाने के बिना, एक निपटान अनुकरण करना है। यदि आप HttpResponseStream ऑब्जेक्ट में हैक कर सकते हैं, तो इसे निपटाने के लिए कहें, m_Closed ध्वज को अनसेट करें, आदि, आप स्ट्रीमिंग डेटा को फ्लश करने में सक्षम हो सकते हैं।

+0

अलग टीसीपी सर्वर लिखना? टीसीपीलिस्टर (जो .NET सॉकेट से तेज़ है) के साथ सबकुछ लिखना बेहतर है, लेकिन यह एचटीपी लिस्टनर की तुलना में बहुत धीमी है। मैं निपटान के स्रोतों की जांच करूंगा, लेकिन इमो जो सही तरीका नहीं है। डेटा पैकेट के साथ परिभाषित http.sys में फ्लश करना है या नहीं। – Mash

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