Der playframework 2.0 Download wird mit einigen Beispielen geliefert. Zwei davon haben Iteratee/Comet-Beispiele. Zum Beispiel sample app der Komet-Uhr zeigt:
lazy val clock = Enumerator.fromCallback {() =>
Promise.timeout(Some(dateFormat.format(new Date)), 100 milliseconds)
}
Dann wird wie folgt verwendet:
Ok.stream(clock &> Comet(callback = "parent.clockChanged"))
die das Ergebnis an den Client in Stücke einfließen werden. Das Enumerator
Objekt hat auch eine fromFile
, fromStream
(wie in java.io.InputStream
) Dienstprogramm-Enumerator-Funktionen.
Ich bin nicht sicher, wo dies getan wird, aber die Annahme ist, dass diese Chunked-Verarbeitung Threads nicht bindet. Es wäre sehr interessant, einige Benchmarks zu sehen, da es bei der Implementierung von Iteraten sicherlich einen Overhead gibt, da die zu verarbeitenden Daten ebenso wie die Berechnung in verschiedene Objekte eingepackt sind.
Daten, die von einem Enumerator eingegeben werden, werden so verpackt, dass sie anzeigen können, dass mehr Daten verarbeitet werden müssen oder die Daten das Ende erreicht haben (EOF). Verarbeitungsergebnisse von Iteraten werden auch so umgebrochen, dass sie anzeigen können, ob ein Ergebnis für eine Eingabe berechnet wurde oder mehr Eingaben erforderlich sind, um ein Ergebnis zu berechnen. Ich empfehle John De Goes nescala presentation, die die Entwicklung von einer Falte zu Iteratees zeigt. Edit: Brendan McAdams hat eine schöne Scala Days 2012 presentation auf Async und nicht blockierend - gegen Ende der Präsentation (~ 26min) berührt es iterates und wie es bei der Verarbeitung von Datenbank-Cursor Stil IO in Async-Stil hilft.
Ein angepriesener Vorteil von Iteratees
ist, dass sie komponieren. Hier sind ein paar Möglichkeiten, wie sie zusammensetzen:
- Sie enumator füttern können andthen andere
- können Sie Karte eine Funktion vom Typ
(T) => U
über einen Enumerator von T
einen Enumerator von U
- zu erhalten Sie können verschachteln zwei Enumeratoren
- ein iteratee kann einige Eingabe von einem anderen iteratee
verbraucht verlassen werden
Es gibt auch eine neuere Präsentation von Playern. Es wird wahrscheinlich alle Ihre Fragen beantworten. http://www.infoq.com/presentations/Play-I-ll-See-Your-Async-and-Raise-You-Reactive – biesior
Hier ist ein [Blog-Post] (http://apocalisp.wordpress.com/2010/10/17/scalaz-tutorial-enumeration-based-io-with-iterates /) über iteratees. Josh Suereth hat auch einen Blog-Post über sie: http://jsuereth.com/scala/2012/02/29/iteratees.html –
Und [Understanding Play2 Iteratees für normale Menschen] (http: // mandubian.com/2012/08/27/verstehen-play2-iterates-for-normal-Menschen /) –