Pregunta

He estado buscando en Mochiweb, pero no puedo encontrar una manera de leer el cuerpo mientras estoy de recibir la solicitud a través de la toma de corriente.

No estoy limitado a Mochiweb, cualquier otra librería HTTP sería bueno para mí.

También probé gen_tcp:listen(Port, [{packet, http}]), de esta manera puedo leer el cuerpo / cabeceras mientras estoy recibiendo la petición HTTP, pero debe manejar manualmente las respuestas y mantener el socket abierto para más peticiones, así que prefiero no utilizar esta solución .

Mi intención es recibir la solicitud con cuerpos grandes y no esperar a recibir el cuerpo completo con el fin de comenzar a leer / procesarlos.

¿Fue útil?

Solución

Con mochiweb se puede doblar sobre trozos del cuerpo de la petición utilizando Req:stream_body/3 . Se espera que una función de controlador trozo como el segundo argumento. Este controlador es llamada con {ChunkSize, BinaryData} y su estado para cada trozo, ya que se recibe desde el zócalo.

Ejemplo (recuperar una lista [invertido] de trozos):

MaxChunkSize = 100,
InitialState = [],
ChunkHandler = fun ({_Size, Bin}, State) -> [Bin | State] end, 
List = Req:stream_body(MaxChunkSize, ChunkHandler, InitialState),
...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top