Entonces, digamos que estoy escribiendo un servidor web y quiero admitir archivos "muy grandes". Supongamos además que quiero hacer esto a través del tipo MIME estándar multipart/form-data. Debo decir que estoy usando erlang y que planeo recolectar paquetes http a medida que se devuelven desde erlang:decode_packet/2
, pero no quiero recopilar realmente el cuerpo de la solicitud hasta que el manejador de solicitudes http encuentre el lugar para que cargue el contenido cargado. ¿Debo I¿Cómo manejo cargas de archivos muy grandes en un servidor web Erlang?
a) seguir adelante y recoger el cuerpo de todos modos, ignorando la posibilidad de que sea muy grande y, por lo tanto, posiblemente se cuelgue el servidor debido a que se está quedando sin memoria?
b) abstenerse de recibir en el socket cualquier cuerpo de solicitud (posiblemente inexistente) hasta que se hayan procesado los encabezados?
c) ¿hacer algo más?
Un ejemplo para la respuesta c podría ser: engendrar otro proceso para recopilar y escribir el contenido cargado en una ubicación temporal (para minimizar el uso de memoria), al mismo tiempo dar esa ubicación al controlador de solicitud http para su posterior procesamiento. Pero simplemente no lo sé, ¿hay una técnica estándar aquí?
Bueno, el consenso parece ser que la forma estándar es hacer lo que sugerí para la opción c. Aún así, creo que debe haber una manera mejor, me molesta la torpeza de los archivos temporales, requieren que se abran puertos de erlang adicionales (más de una vez si planeo leer el archivo de nuevo en algún momento), y dividen entre dos o más procesos lo que me gustaría que manejara uno. Esto es, sin embargo, lo que había estado planeando hacer: había pensado que alguien podría estar haciendo las cosas de otra manera. – Aoriste
Necesita almacenar los datos. Prácticamente esto se hace en la memoria o en un dispositivo de almacenamiento. Su pregunta dice que la memoria no es una opción; tu comentario dice que tampoco te gusta almacenarlo en un dispositivo. La única opción restante es el ocultismo ... – Zed