Ich habe in Mochiweb untersucht, aber ich finde keine Möglichkeit, den Körper zu lesen, während ich die Anfrage über den Socket erhalte.In Erlang den Körper einer HTTP-Anfrage einlesen, wie sie empfangen wird
Ich bin nicht auf Mochiweb beschränkt, jede andere HTTP-Bibliothek wäre gut für mich.
Ich versuchte auch gen_tcp:listen(Port, [{packet, http}])
, auf diese Weise kann ich lesen, die Körper/Header, während ich die HTTP-Anfrage empfange, aber ich muss manuell die Antworten und halten den Socket offen für weitere Anfragen, so dass ich es lieber nicht verwenden Lösung.
Meine Absicht ist es, Anfrage mit großen Körpern zu erhalten und nicht zu warten, um den vollständigen Körper zu erhalten, um zu beginnen, sie zu lesen/zu verarbeiten.
Dies muss innerhalb der definierten Anforderungshandler getan werden? Aber der Request-Handler wird aufgerufen, wenn die vollständige Anfrage empfangen wurde, oder? Ich sehe nicht, wie 'Req: stream_body (...)' den Körper liest, während er durch den Sockel ankommt. Ich muss mich in etwas irren, weiß aber nicht wo. – Ricardo
Der Request-Handler wird sehr früh aufgerufen, sobald die Header gelesen wurden. Innerhalb des Handlers können Sie entweder die vollständige Anfrage mit 'Req: recv_body/0' erhalten oder sie mit' Req: stream_body/3' streamen. Die Implementierung von 'stream_body' liest Daten aus dem Socket in Chunks und übergibt sie an Ihre Chunk-Handler-Funktion. glaub mir, es funktioniert! –
OK, das macht Sinn. Danke für deine Hilfe Felix. – Ricardo