ruby stream fastcgi rack io-buffering

ruby - Transmisión de cargas web en el zócalo con Rack



stream fastcgi (1)

Actualmente tengo una aplicación Sinatra ejecutándose en un controlador FCGI. Quiero escribir un controlador que se situará dentro del archivo de rackup (probablemente en frente de la aplicación Sinatra) y transmitirá grandes cargas de archivos a otro servidor a través de sockets (sin almacenarlo primero en el búfer) y lo hará en el interbloqueo con la solicitud. Entonces, lo que me gustaría hacer es algún tipo de flujo de trabajo de flujo-decodificar-enviar sin param preparsing. He leído en algún lado que hay un problema con esto porque específicamente debido a la forma en que el equipo de Rails quiere ver la interconexión de middleware, todas las cargas en Rack se han vuelto rebobibles, lo que implica que la carga se almacenará, por lo que no solo no puedo un progreso de carga dentro de Rack, pero también tengo que almacenar el archivo en el disco y luego enviarlo en sentido descendente.

¿Hay alguna solución cruzada que vincule el bucle de solicitud del servidor web al respondedor de rack y no fuerce el rebobinado en la entrada (y no fuerce el búfer en memoria de la carga, que es una locura estúpida absoluta)? ¿Cuáles son los enfoques actuales para este tipo de problema?


Tiene razón: las especificaciones de Rack requieren entradas rebobinables, lo que implica el almacenamiento en búfer. Parece que Rack no es la herramienta para este trabajo.

Es posible que desee probar FastCGI, que sí permite la transmisión sin búfer. O tal vez un Java Servlet. Mi 2 ¢: ¿Realmente lo necesitas? Si no, no se preocupe, el espacio en disco es realmente barato. Si es así, ¿realmente necesitas hacerlo en Ruby?

editar : Mongrel :: HTTPRequest no admite entradas de transmisión de gran tamaño sin búfer (sin monopatching)