القراءة في إرلانج جسم طلب HTTP عند استلامه
سؤال
لقد كنت أبحث في Mochiweb ، لكن لا يمكنني العثور على طريقة لقراءة الجسم أثناء تلقي الطلب من خلال المقبس.
أنا لا تقتصر على mochiweb ، أي مكتبة HTTP أخرى ستكون جيدة بالنسبة لي.
لقد حاولت أيضا gen_tcp:listen(Port, [{packet, http}])
, ، وبهذه الطريقة ، يمكنني قراءة الجسم/الرؤوس أثناء تلقي طلب HTTP ، لكن يجب أن أتعامل يدويًا مع الاستجابات والحفاظ على المقبس مفتوحًا لمزيد من الطلبات ، لذلك أفضل عدم استخدام هذا الحل.
نيتي هو تلقي الطلب مع أجسام كبيرة وعدم الانتظار لتلقي الجسم الكامل من أجل البدء في القراءة/معالجتها.
المحلول
مع mochiweb يمكنك طي أجزاء من جسم الطلب باستخدام Req:stream_body/3
. يتوقع وظيفة معالج قطعة كحجة ثانية. هذا المعالج يسمى مع{ChunkSize, BinaryData}
وحالتك لكل قطعة ، حيث يتم استلامها من المقبس.
مثال (استرداد قائمة [عكسية] من القطع):
MaxChunkSize = 100,
InitialState = [],
ChunkHandler = fun ({_Size, Bin}, State) -> [Bin | State] end,
List = Req:stream_body(MaxChunkSize, ChunkHandler, InitialState),
...