Ich habe einen einfachen HTTP-Server mit Twisted erstellt, der den Header Content-Type: multipart/x-mixed-replace sendet. Ich verwende das, um einen HTTP-Client zu testen, den ich einrichten möchte, um einen langfristigen Stream zu akzeptieren.Wie benutze ich Twisted's twisted.web Klassen, wie speichere ich meine ausgehenden Puffer?
Das Problem, das aufgetreten ist, ist, dass meine Client-Anforderung hängt, bis die http.Request ruft self.finish(), dann erhält es alle mehrteiligen Dokumente auf einmal.
Gibt es eine Möglichkeit, die Ausgabepuffer manuell auf den Client zu leeren? Ich gehe davon aus, dass ich deshalb die einzelnen mehrteiligen Dokumente nicht erhalte.
#!/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()
Ermöglicht dies effektiv jeden anderen (wie vom Reaktor ausgewählt) Code auszuführen, wenn Sie nachgeben? Wenn dies der Fall ist, müssen Sie sehr vorsichtig sein, dass die Daten, die Sie verwenden, nicht vom anderen Code überschrieben oder geändert werden. Siehe den Kommentar unter der URL, die ich nirgendwo widersprüchlich gesehen habe: http://twistedmatrix.com/pipermail/twisted-python/2007-February/014869.html – Mick