Question

Je me suis renseigné sur Mochiweb, mais je ne peux pas trouver un moyen de lire le corps pendant que je reçois la demande via la prise.

Je ne suis pas limité à Mochiweb, toute autre bibliothèque HTTP serait bon pour moi.

J'ai aussi essayé gen_tcp:listen(Port, [{packet, http}]), de cette façon, je peux lire le corps / têtes pendant que je reçois la requête HTTP, mais je dois gérer manuellement les réponses et en gardant la prise ouverte pour plus de demandes, donc je préfère ne pas utiliser cette solution .

Mon intention est de recevoir la demande avec de grands corps et de ne pas attendre pour recevoir le corps entier afin de commencer la lecture / de les traiter.

Était-ce utile?

La solution

Avec mochiweb vous pouvez replier sur des morceaux du corps de la requête en utilisant Req:stream_body/3 . Il attend une fonction de gestionnaire de morceau comme second argument. Ce gestionnaire est appelé avec {ChunkSize, BinaryData} et votre état pour chaque morceau, comme il est reçu de la prise.

Exemple (la récupération d'un [inversé] liste des morceaux):

MaxChunkSize = 100,
InitialState = [],
ChunkHandler = fun ({_Size, Bin}, State) -> [Bin | State] end, 
List = Req:stream_body(MaxChunkSize, ChunkHandler, InitialState),
...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top