He creado un servidor http simple utilizando Twisted, que envía el encabezado Content-Type: multipart/x-mixed-replace. Estoy usando esto para probar un cliente http que quiero configurar para aceptar una transmisión a largo plazo.Utilizando las clases twisted.web de Twisted, ¿cómo puedo eliminar mis buffers salientes?
El problema que ha surgido es que la solicitud de mi cliente se cuelga hasta que http.Request llama a self.finish(), luego recibe todos los documentos de varias partes a la vez.
¿Hay alguna forma de purgar manualmente los búferes de salida hasta el cliente? Supongo que es por eso que no recibo los documentos individuales de varias partes.
#!/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()
¿Esto permite efectivamente ejecutar cualquier otro código (como se selecciona por reactor) cuando se produce? Si es así, debe tener mucho cuidado de que los datos que está utilizando no se sobrescriban o alteren con el otro código. Vea el comentario en la URL a continuación que no he visto refutado en ninguna parte: http://twistedmatrix.com/pipermail/twisted-python/2007-February/014869.html – Mick