Когда вы говорите «chunked», вы имеете в виду, что на уровне протокола HTTP, как в? В то время как вы можете работать с «кусками» данных, в Play они не обязательно соотносятся с 1 к 1 с кусками в закодированном кодировании. На самом деле, вы никогда не должны полагаться на демаркацию этих кусков, так как совершенно законно для любого прокси-сервера отчуждать его или переписывать на разных этапах. Таким образом, вы должны убедиться, что любой протокол в кусках может указывать начало и конец ваших логических фрагментов данных, независимо от того, как базовый поток фактически закодирован, учитывая тот факт, что каждый фактический кусок, который получает ваш код, может содержат несколько логических фрагментов, частичные логические фрагменты или и то, и другое.
Итак, при таком понимании, чтобы проанализировать ваши данные, вам нужно написать итерацию. A Воспроизведение BodyParser
по существу является функцией, которая принимает RequestHeader
и возвращает Iteratee[Array[Byte], B]
, который анализирует тело типа B
. Я написал сообщение в блоге, что объясняет iteratees здесь:
http://jazzy.id.au/default/2012/11/06/iteratees_for_imperative_programmers.html
Пример протокола, который вы можете использовать, чтобы разграничить ваши куски могут быть JSON, есть блог здесь о том, как на самом деле сделать это с помощью JSON:
http://manuel.bernhardt.io/2013/10/21/reactive-golf-or-iteratees-and-all-that-stuff-in-practice-part-2/
Я понимаю, что, когда я реализую свой собственный анализатор тела я должен реализовать его применить метод, который должен возвращать Iteratee [Array [Byte], либо [Result, Int]] Однако я не уверен, как выглядит его метод сгиба. Я знаю, что его объявление должно быть примерно таким: def fold [B] (папка: (Step [Array [Byte], либо [Result, Int]]) => Future [B]) (неявный ec: ExecutionContext): Будущее [B] , но я не знаю, как его тело должно быть реализовано. – Mizh