公式のドキュメントとこれらの質問にリンクされているリソースを読んだにもかかわらず、私はこの質問をするのがかなり深遠だと感じています。
Play 2.0のIteratee、Enumerator、Enumerateeを理解できません
...反復、列挙子、およびPlay2.0のリアクティブモデル全般についてはまだかなりぼんやりしています。とにかく、大きなXML(> 100MB)ファイルをアップロードし、特定の(インターリーブされていない)NodeSeqを選択して処理し、結果をクライアントにストリーミングできるWebサービスをセットアップしたいと思います。
私が最初に行う必要があるのは、バイトのチャンクを受け取り、それらをXMLパーサーにフィードし、必要なNodeSeqsのストリームを<doc>...</doc>
怠惰な方法で出力するBodyParserを作成することだと思います。
誰かがこれがどのように達成されるかを説明するガイダンスや例を提供できますか?
更新:より多くの背景:-
私のXMLは実際にはSolradd
ドキュメントなので、次のようになります。
<add>
<doc>
<field name="name">Some Entity</field>
<field name="details">Blah blah...</field>
...
</doc>
...
</add>
それぞれをストリーミング方式で処理したい<doc>
ので、パーサーは明らかに、<doc>
開始イベントに到達するまで待機し、同等の</doc>
終了イベントまですべてをバッファリングし、完了した要素のNodeSeqを発行してから、そのバッファをフラッシュする必要があります。
これがPlayBodyParserでどのように機能するか、私は完全にはわかりません。私がやりたいことをさらに明確にすることができれば、より多くの更新があります!
XMLファイル全体は大きいですが、各<doc />
要素自体は非常に小さいですが、バイトバッファが特定のサイズを超えていないことを確認する必要があることは明らかです。