我剛開始學習Play 2.0框架。我無法理解的一件事是play tutorial中描述的Iteratee,Enumerator和Enumeratee模式。我在功能語言方面的經驗很少。不能理解遊戲中的迭代器,枚舉器,枚舉器2.0
這種模式完成了什麼?
它如何幫助我編寫非阻塞/反應式代碼?
一些簡單的例子會有所幫助。
我剛開始學習Play 2.0框架。我無法理解的一件事是play tutorial中描述的Iteratee,Enumerator和Enumeratee模式。我在功能語言方面的經驗很少。不能理解遊戲中的迭代器,枚舉器,枚舉器2.0
這種模式完成了什麼?
它如何幫助我編寫非阻塞/反應式代碼?
一些簡單的例子會有所幫助。
playframework 2.0下載附帶一些示例。其中兩個有Iteratee/Comet示例。舉例來說,彗星時鐘sample app顯示:
lazy val clock = Enumerator.fromCallback {() =>
Promise.timeout(Some(dateFormat.format(new Date)), 100 milliseconds)
}
然後這樣使用:
Ok.stream(clock &> Comet(callback = "parent.clockChanged"))
這將結果輸送給客戶端的塊。 Enumerator
對象還有一個fromFile
,fromStream
(如java.io.InputStream
)實用程序枚舉器函數。
我不知道在哪裏做了這個,但假設是這個分塊處理不是捆綁線程。看到一些基準測試會非常有趣,因爲迭代的執行會有一定的開銷,因爲要處理的數據以及計算包含在各種對象中。
從枚舉數中提供的數據被打包,以便它可以指示有更多數據要處理或數據已到達結尾(EOF)。迭代的處理結果也被打包,以便它可以指示某個輸入上是否計算了結果,或者需要更多輸入來計算結果。我推薦John De Goes'nescala presentation,它展示了從摺疊到迭代的演變。編輯:Brendan McAdams在異步和非阻塞方面擁有不錯的Scala Days 2012 presentation - 接近展示結束時(〜26分鐘),它涉及迭代以及它如何幫助處理異步樣式的數據庫光標樣式IO。
Iteratees
一個被吹捧的好處是他們組成。以下是他們組成幾個方面:
(T) => U
類型的超過T
枚舉函數來獲取U
Play的創作者也有更新的演示。它會回答你的所有問題。 http://www.infoq.com/presentations/Play-I-ll-See-Your-Async-and-Raise-You-Reactive – biesior 2012-05-20 08:18:40
這是[博客文章](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 – 2012-04-16 16:40:02
和[瞭解普通人類的Play2迭代器](http:// mandubian。com/2012/08/27/understanding-play2-iteratees-for-normal-humans /) – 2014-07-12 14:35:44