2012-08-05 22 views
16

Tôi đang học Akka và tôi đang cố gắng tìm ra cách để các diễn viên trò chuyện với nhau (hãy gọi cho họ AB). Đây không phải là kịch bản yêu cầu/phản hồi, AB đang gửi từng thư khác bất kỳ lúc nào.Akka actorFor vs qua ActorRef

Hiện tại, tôi có hai diễn viên anh chị em gửi tin nhắn theo cả hai hướng cho nhau. Cả hai đều được tạo trực tiếp trên ActorSystem. Ban đầu, tôi đã chuyển số ActorRef của A vào hàm tạo của B. Nhưng tôi không thể chuyển số ActorRef của B cho hàm tạo của A vì nó chưa tồn tại, tức là tôi không thể sử dụng phương pháp này để tham khảo vòng tròn.

Tôi đã đọc khoảng actorFor và điều này sẽ cho phép tôi tra cứu một diễn viên bằng đường dẫn của nó. Tuy nhiên, tôi không thoải mái với thiết lập này, bởi vì nếu đường dẫn thay đổi, nó sẽ không bị trình biên dịch bắt.

Một lựa chọn khác, xem xét tất cả các diễn viên có quyền truy cập vào đó là cha mẹ, là để vượt qua các thông điệp từ AB cho phụ huynh và sau đó đã phụ huynh vượt qua được thông báo trở lại xuống AB. Nhưng cặp vợ chồng này cha mẹ các loại tin nhắn được chuyển qua lại.

Các chiến lược là những người sử dụng để làm cho các diễn viên nhận thức được nhau? Tôi có quá thận trọng khi nhìn lên các diễn viên bằng con đường không?

+0

Bạn đã thử sử dụng 'lazy val's khi instantiating' ActorRef 's? Tôi có thể tưởng tượng điều này sẽ giúp giải quyết sự phụ thuộc vòng tròn. Giả sử bạn sử dụng Scala của khóa học ... – agilesteel

+0

Tôi chỉ cho rằng một đi và nó hoạt động. Tôi không biết bạn tham khảo một val lười biếng trước khi nó được xác định - những thứ điên rồ! Cảm ơn vì tiền hỗ trợ. Tôi vẫn sẽ được quan tâm để biết làm thế nào mọi người cảm thấy về việc vượt qua ActorRefs vs đường dẫn. – Geoff

+0

Đảm bảo bạn đã đọc http://doc.akka.io/docs/akka/2.0.2/general/addressing.html. – sourcedelica

Trả lời

11

Trong thiển ý của tôi bạn có ba chiến lược, mà tôi liệt kê từ gần gũi hơn với vấn đề của bạn (mà còn để tôi mô hình tồi tệ nhất, tôi xin lỗi)

Chiến lược 1: bạn tạo diễn viên A và diễn viên B, truyền actorRef A tới hàm tạo của tác nhân B. Ping-pong của bạn sẽ bắt đầu từ diễn viên B gửi một thông điệp tới diễn viên A và diễn viên A có thể trả lời đơn giản bằng cách sử dụng tham chiếu người gửi. (Hoặc ngược lại)


Chiến lược 2: bạn tạo một lớp trong ứng dụng của bạn mà sẽ chăm sóc của việc đặt tên: nó gán tên vào việc tạo ra các diễn viên, cũng như khi truy vấn. Điều này tập trung vấn đề trong một điểm duy nhất.


Chiến lược 3: Bạn tự hỏi, nếu hai anh chị em diễn viên chơi ping-pong không thay thế một tốt hơn, hệ thống cấp bậc diễn viên mô-đun mà về cơ bản mỗi diễn viên chỉ giao tiếp với cha mẹ mình và con cái của mình và không có kiến ​​thức về anh chị em của mình.

+3

Chiến lược 3 có âm thanh hợp lý nhất. Tôi hơi lo lắng rằng các bậc phụ huynh sẽ phải làm rất nhiều hệ thống dây điện, nhưng tôi đoán đó là ok vì đó là công việc của cha mẹ để phối hợp các con của nó (bên cạnh đó, chỉ chuyển tiếp các tin nhắn không có nhiều công việc). – Geoff

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