8

PushEnumeratorは、PlayFramework2.1-RCで非推奨になります。ドキュメントには、代わりにConcurrent.broadcastを使用するように指示されています。ただし、プッシュするデータはユーザーに依存しているため、各ユーザーに同じデータをブロードキャストすることはできません。

言い換えると、Concurrent.broadcastは、多くの反復に接続する1つの列挙子を提供しますが、多くの反復に接続する多くの列挙子が必要です。

4

1 に答える 1

5

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]
于 2013-04-13T01:38:00.757 に答える