PushEnumeratorは、PlayFramework2.1-RCで非推奨になります。ドキュメントには、代わりにConcurrent.broadcastを使用するように指示されています。ただし、プッシュするデータはユーザーに依存しているため、各ユーザーに同じデータをブロードキャストすることはできません。
言い換えると、Concurrent.broadcastは、多くの反復に接続する1つの列挙子を提供しますが、多くの反復に接続する多くの列挙子が必要です。
PushEnumeratorは、PlayFramework2.1-RCで非推奨になります。ドキュメントには、代わりにConcurrent.broadcastを使用するように指示されています。ただし、プッシュするデータはユーザーに依存しているため、各ユーザーに同じデータをブロードキャストすることはできません。
言い換えると、Concurrent.broadcastは、多くの反復に接続する1つの列挙子を提供しますが、多くの反復に接続する多くの列挙子が必要です。
Concurrent.unicast[E] を使用する簡単な例を次に示します。
// assume the following exist:
def readValueAsync(source: MySource): Future[Any]
val source: MySource = ...
// this is where the meat is:
val valueEnumerator = Concurrent.unicast[Any] {
(channel: Concurrent.Channel[Any]) =>
readValueAsync(source) onComplete {
case Success(x: Any) => channel.push(x)
case Failure(t) => channel.end(t)
}
}
// you can then collect it using an iteratee
// since my enumerator never really ends, I only take 10 elements here
val result: List[Any] =
valueEnumerator through Enumeratee.take(10) run Interatee.getChunks[Any]