playframework 2.0のダウンロードにはいくつかのサンプルが付属しています。 2つはIteratee/Cometの例です。例えば、彗星、クロックsample appショー:チャンクでクライアントに結果を送ります
Ok.stream(clock &> Comet(callback = "parent.clockChanged"))
:
lazy val clock = Enumerator.fromCallback {() =>
Promise.timeout(Some(dateFormat.format(new Date)), 100 milliseconds)
}
次に、それをこのように使用されます。 Enumerator
オブジェクトは、fromFile
,fromStream
(java.io.InputStream
のように)ユーティリティ列挙関数も持っています。
私はこれがどこで行われたのかわかりませんが、このチャンク処理がスレッドを縛っていないという前提があります。いくつかのベンチマークを見ることは非常に面白いでしょう。処理されるデータや計算がさまざまなオブジェクトにラップされるため、イテレートの実装にはオーバーヘッドがあります。
列挙子から供給されるデータは、処理するデータがさらにあるか、またはデータが最後に達したことを示すことができるようにラップされます(EOF)。 iterateesの処理結果もラップされ、ある入力で結果が計算されたかどうか、または結果を計算するためにはさらに多くの入力が必要かどうかを示すことができます。私はJohn De Goesのnescala presentationにフォールドからイテラテスへの進化を示すことをお勧めします。編集:Brendan McAdamsは、非同期と非ブロッキングの素晴らしいScala Days 2012 presentationを持っています。プレゼンテーションの終わり(〜26分)ではiterateesに触れ、非同期スタイルでデータベースカーソルスタイルIOを処理するのに役立ちます。
Iteratees
の1つの宣伝された利点はそれらが構成するということです。ここでは、彼らが構成するいくつかの方法があります:あなたがenumator andThenを養うことができ
- 別
- することができますマップ
U
- の列挙子を取得する
T
の列挙子を超える種類(T) => U
の機能あなたはインターリーブ 2つの列挙子
- iterateeは別のiterateeによって消費されるいくつかの入力を残すことができます
Playのクリエイターからも新しいプレゼンテーションがあります。おそらくすべてのあなたの質問に答えるでしょう。 http://www.infoq.com/presentations/Play-I-ll-See-Your-Async-and-Raise-You-Reactive – biesior
ここには[ブログの投稿](http://apocalisp.wordpress.com/2010)があります。/10/17/scalaz-tutorial-enumeration-based-io-with-iteratees /)を参照してください。 Josh Suerethには、彼らについてのブログ記事があります:http://jsuereth.com/scala/2012/02/29/iteratees.html –
そして[正常な人間のためのPlay2 Iterateesの理解](http:// mandubian。com/2012/08/27/understanding-play2-iteratees-for-normal-humans /) –