2012-04-16 19 views
26

Tôi vừa mới bắt đầu tìm hiểu Khung chơi 2.0. Một điều tôi không thể hiểu là mẫu Iteratee, Enumerator và Enumeratee được mô tả trong số play tutorial. Tôi có rất ít kinh nghiệm về các ngôn ngữ chức năng.Không thể hiểu Iteratee, ĐTV, Enumeratee trong Play 2.0

Mẫu này có hiệu quả gì?

Làm cách nào để tôi viết mã không bị chặn/phản ứng?

một số ví dụ đơn giản sẽ hữu ích.

+0

Cũng có bản trình bày mới hơn từ người sáng tạo của Play. Nó sẽ trả lời có lẽ tất cả các câu hỏi của bạn. http://www.infoq.com/presentations/Play-I-ll-See-Your-Async-and-Raise-You-Reactive – biesior

+0

Đây là [bài đăng blog] (http://apocalisp.wordpress.com/2010/10/17/scalaz-hướng dẫn-liệt kê-dựa-io-với-iteratees /) về iteratees. Josh Suereth cũng có một bài đăng trên blog về họ: http://jsuereth.com/scala/2012/02/29/iteratees.html –

+0

Và [Hiểu Play2 Iteratees cho con người bình thường] (http: // mandubian.com/2012/08/27/understand-play2-iteratees-for-normal-human /) –

Trả lời

19

Bản tải xuống playframework 2.0 đi kèm với một số mẫu. Hai trong số đó có các ví dụ về Iteratee/Comet. Ví dụ, sao chổi ngày đêm sample app cho thấy:

lazy val clock = Enumerator.fromCallback {() => 
    Promise.timeout(Some(dateFormat.format(new Date)), 100 milliseconds) 
} 

Sau đó, nó được sử dụng như thế này:

Ok.stream(clock &> Comet(callback = "parent.clockChanged")) 

Mà sẽ ăn kết quả cho khách hàng trong khối. Đối tượng Enumerator cũng có các chức năng điều tra tiện ích số fromFile, fromStream (như trong java.io.InputStream).

Tôi không chắc chắn nơi này được thực hiện nhưng giả định là xử lý chunked này không phải là buộc lên chủ đề. Nó sẽ rất thú vị để xem một số điểm chuẩn, vì có chắc chắn trên không trong việc thực hiện iteratees như dữ liệu được xử lý cũng như tính toán được bao bọc trong các đối tượng khác nhau.

Dữ liệu được nạp từ một điều tra viên được gói để nó có thể cho biết có nhiều dữ liệu hơn để xử lý hoặc dữ liệu đã đạt đến kết thúc (EOF). Các kết quả xử lý của các iterate cũng được bao bọc sao cho nó có thể cho biết kết quả đã được tính toán trên một số đầu vào hay nhiều đầu vào là cần thiết để tính kết quả. Tôi khuyên bạn nên John De Goes 'nescala presentation cho thấy sự tiến hóa từ một lần đến Iterate. Chỉnh sửa: Brendan McAdams có một Scala Days 2012 presentation trên Async và không chặn - về phía cuối của bản trình bày (~ 26min) nó chạm vào iteratees và cách nó giúp xử lý cơ sở dữ liệu kiểu con trỏ IO theo kiểu không đồng bộ.

Một lợi ích chào hàng của Iteratees là chúng được sáng tác. Dưới đây là một vài cách họ soạn:

  • bạn có thể ăn một enumator andThen khác
  • bạn có thể đồ một chức năng của loại (T) => U qua một Enumerator của T để có được một Enumerator của U
  • bạn có thể xen kẽ hai điều tra viên
  • một iteratee có thể để lại một số đầu vào được tiêu thụ bởi một iteratee khác
+0

Bài thuyết trình video đó dường như là riêng tư. – Traveler

+0

@Traveler, vâng thực sự, đó là một sự xấu hổ vì nó được sử dụng để được công khai. Tôi không biết liệu nó có chủ ý hay tạm thời không. – huynhjl

+0

@Traveler, tôi đoán họ đã sửa nó, tôi vừa thử và video hiện có sẵn. – huynhjl

Các vấn đề liên quan