Có hướng dẫn hoặc hướng dẫn nào giải thích khả năng sử dụng diễn viên scala từ xa không? Tất cả tôi đã tìm thấy cho đến bây giờ là một ví dụ (không có ý kiến) nhưng đó là hầu như không đủ.Scala diễn viên từ xa
Trả lời
Tôi đã viết an article with an example app to explain the use of Remote Actors một chút thời gian trước đây.
Vâng, nó không có ý kiến bên trong mã (có thể bạn thậm chí có nghĩa là bài viết đó), nhưng có những giải thích bên dưới mã.
Có một ví dụ mới khác dựa trên mã của tôi nhưng đơn giản hơn và đặt classpath theo cách thủ công tránh các sự cố: http : //youshottheinvisibleswordsman.co.uk/2009/04/01/remoteactor-in-scala/ – dmeister
dmeister điều gì đã xảy ra với bạn blog? –
Dường như liên kết của bạn bị hỏng.Bạn có thể khắc phục điều đó, cũng như diễn giải những gì bạn đang liên kết để thông tin vẫn hợp lệ trong trường hợp liên kết lại chết không? –
Không ai trong số đó tôi biết. Đó là khá nhiều cách "hack theo cách của bạn thông qua rừng". Đánh giá từ API mặc dù, mọi thứ sẽ hoạt động khá giống với các diễn viên thông thường, trong đó có tồn tại một hoặc hai hướng dẫn (cũng như một vài cuốn sách bây giờ).
Nếu bạn sử dụng các diễn viên từ xa, chúng tôi (cộng đồng) chắc chắn sẽ chào đón một hướng dẫn như vậy từ một người dùng có kinh nghiệm!
Chỉ cần cẩn thận để gửi các tin nhắn có thể tuần tự hóa (trường hợp các lớp và đối tượng trường hợp!) Và chắc chắn rằng phía đối diện có thể tạo lớp. Xem ra cho các Trình nạp lớp tùy chỉnh hoặc các JAR bị thiếu trong các đường dẫn lớp của bạn.
Khung Akka có remote actors. API khá giống với các diễn viên scala thông thường.
Chúng cũng cung cấp một số mức tự động phân cụm, nhưng không hoàn chỉnh.
thời gian gần đây đã có một hướng dẫn bổ sung trên trang đầu của www.scala-lang.org, đây là liên kết http://www.scala-lang.org/docu/files/actors-api/actors_api_guide.html#
lẽ đây là một necropost nhưng tôi đang tìm kiếm khắp nơi và không thể tìm thấy nhiều . Hy vọng rằng điều này sẽ giúp một ai đó.
Tôi đang chạy Mac OS 10.6.8 và Scala 2.9.0.1. Tôi đã gặp sự cố khi tải ví dụ về diễn viên từ xa chuẩn. Tôi đã kết thúc với mã sau đây.
Lưu ý: Phương thức xóa chỉ nhằm ngăn thư được xếp chồng. Nó không quan trọng đối với ví dụ. Tương tự như vậy, các cuộc gọi tới Thread.sleep chỉ giúp bạn dễ dàng xem những gì đang diễn ra khi chạy.
Biên dịch nó, sau đó trong trường hợp vỏ riêng biệt làm:
$> scala Ping
và
$> scala Pong
trong bất kỳ thứ tự. Bạn có thể thử nghiệm bằng cách giết một trong số chúng tại một thời điểm và truy tìm mã.
import scala.actors._
import scala.actors.Actor._
import scala.actors.remote._
import scala.actors.remote.RemoteActor._
/** @author Connor Doyle */
// Remote messages must be serializable.
// The easist way to do this is to wrap
// them with a case class
case class Message(text: String)
abstract class PingPongActor extends Actor with App {
val pingPort = 9000
val pongPort = 9001
val delay = 1000
classLoader = getClass().getClassLoader() // hack!
start
// this method consumes all pending messages
// the library should have implemented an atomic
// receiveAndClear operation
def clear: Unit = receiveWithin(0) {
case TIMEOUT =>()
case _ => clear
}
}
object Ping extends PingPongActor {
// result of select already lazy, but explicit lazy conveys
// semantics clearly
lazy val pong = select(Node("localhost", pongPort), 'pong)
def act = {
alive(pingPort)
register('ping, self)
loop {
pong ! Message("ping")
receiveWithin(delay * 2) {
case Message(text: String) => {
clear
println("received: "+text)
Thread.sleep(delay) // wait a while
}
case TIMEOUT => println("ping: timed out!")
}
}
}
}
object Pong extends PingPongActor {
lazy val ping = select(Node("localhost", pingPort), 'ping)
def act = {
alive(pongPort)
register('pong, self)
loop {
receiveWithin(delay * 2) {
case Message(text: String) => {
println("received: "+text)
Thread.sleep(delay) // wait a while
clear
ping ! Message("pong")
}
case TIMEOUT => println("pong: timed out")
}
}
}
}
Chúc mừng!
Nhìn lại, sau khi đã sử dụng diễn viên để xây dựng một hệ thống, một hoạt động "nhận nguyên tử và rõ ràng" trong hầu hết các trường hợp là một ý tưởng khủng khiếp. –
- 1. một ngoại lệ diễn viên từ xa scala
- 2. Scala diễn viên Remote Security
- 3. AKKA gửi một đóng cửa với diễn viên từ xa
- 4. Triển khai diễn viên Scala diễn viên khác nhau Tổng quan
- 5. Phát hiện máy chủ diễn viên từ xa Akka
- 6. Scala: Tại sao diễn viên lại nhẹ?
- 7. Sự khác biệt của diễn viên Akka với mô hình diễn viên của Scala
- 8. Kiểm tra xem diễn viên Akka từ xa có khả dụng không
- 9. gc của số lượng lớn hơn diễn viên scala
- 10. chấm dứt chính xác các diễn viên akka trong scala
- 11. Thử nghiệm đơn vị diễn viên Akka với Scala
- 12. Thông báo lỗi với Scala AKKA diễn viên
- 13. chương trình bị treo khi sử dụng nhiều tương lai với nhiều diễn viên từ xa
- 14. Akka EventBus có hoạt động với các diễn viên từ xa không?
- 15. Khi nào nên sử dụng diễn viên địa phương và từ xa?
- 16. Các diễn viên ở Clojure
- 17. Đợi diễn viên xuất cảnh()
- 18. Diễn viên đang ngủ?
- 19. pykka - Diễn viên chậm?
- 20. Soạn diễn viên
- 21. Cập nhật để chơi 2.0.2 - Địa chỉ đã được sử dụng với diễn viên từ xa akka
- 22. Ưu tiên diễn viên Akka
- 23. Thực tiễn không tốt là gửi một diễn viên một thông điệp từ một thứ không phải là diễn viên?
- 24. Akka Socket cho mỗi diễn viên
- 25. việc gửi tin nhắn Từ Non-diễn viên trong Akka
- 26. Loại dàn diễn viên nào từ Type * đến void *?
- 27. Tương tác với các diễn viên trong các ứng dụng scala swing
- 28. Quyết định thiết kế nào sẽ ủng hộ các diễn viên của Scala thay vì JMS?
- 29. Các tác nhân của Clojure so sánh với các diễn viên của Scala như thế nào?
- 30. Trong hàm Scala được tham số hóa này, tại sao tôi cần dàn diễn viên?
Tài liệu gần đây: http://docs.scala-lang.org/overviews/core/actors.html#remote_actors – ekillaby