मैंने ट्विस्ट का उपयोग करके एक साधारण http सर्वर बनाया है, जो सामग्री-प्रकार: मल्टीपार्ट/एक्स-मिश्रित-प्रतिस्थापन शीर्षलेख भेजता है। मैं इसका उपयोग एक http क्लाइंट का परीक्षण करने के लिए कर रहा हूं जिसे मैं दीर्घकालिक स्ट्रीम स्वीकार करने के लिए सेट अप करना चाहता हूं।ट्विस्ट के twisted.web कक्षाओं का उपयोग करके, मैं अपने आउटगोइंग बफर कैसे फ़्लश कर सकता हूं?
उत्पन्न हुई समस्या यह है कि मेरा क्लाइंट अनुरोध http.Request कॉल self.finish() को तब तक लटकता है, फिर इसे सभी मल्टीपार्ट दस्तावेज़ एक बार में प्राप्त होते हैं।
क्या क्लाइंट को आउटपुट बफर मैन्युअल रूप से फ़्लश करने का कोई तरीका है? मुझे लगता है कि यही कारण है कि मुझे व्यक्तिगत मल्टीपार्ट दस्तावेज नहीं मिल रहे हैं।
#!/usr/bin/env python
import time
from twisted.web import http
from twisted.internet import protocol
class StreamHandler(http.Request):
BOUNDARY = 'BOUNDARY'
def writeBoundary(self):
self.write("--%s\n" % (self.BOUNDARY))
def writeStop(self):
self.write("--%s--\n" % (self.BOUNDARY))
def process(self):
self.setHeader('Connection', 'Keep-Alive')
self.setHeader('Content-Type', "multipart/x-mixed-replace;boundary=%s" % (self.BOUNDARY))
self.writeBoundary()
self.write("Content-Type: text/html\n")
s = "<html>foo</html>\n"
self.write("Content-Length: %s\n\n" % (len(s)))
self.write(s)
self.writeBoundary()
time.sleep(2)
self.write("Content-Type: text/html\n")
s = "<html>bar</html>\n"
self.write("Content-Length: %s\n\n" % (len(s)))
self.write(s)
self.writeBoundary()
time.sleep(2)
self.write("Content-Type: text/html\n")
s = "<html>baz</html>\n"
self.write("Content-Length: %s\n\n" % (len(s)))
self.write(s)
self.writeStop()
self.finish()
class StreamProtocol(http.HTTPChannel):
requestFactory = StreamHandler
class StreamFactory(http.HTTPFactory):
protocol = StreamProtocol
if __name__ == '__main__':
from twisted.internet import reactor
reactor.listenTCP(8800, StreamFactory())
reactor.run()
क्या यह प्रभावी रूप से किसी भी अन्य को अनुमति देता है (जैसा कि रिएक्टर द्वारा चुना जाता है) कोड उत्पन्न होने पर कोड चलाया जाता है? यदि ऐसा है तो आपको बहुत सावधान रहना होगा कि आपके द्वारा उपयोग किए जा रहे डेटा को अन्य कोड द्वारा अधिलेखित या परिवर्तित नहीं किया गया है। नीचे दिए गए यूआरएल पर टिप्पणी देखें जिसे मैंने कहीं भी नहीं देखा है: http://twistedmatrix.com/pipermail/twisted-python/2007- फरवरी/014869.html – Mick