2015-11-17 13 views
5

Tôi muốn gửi tin nhắn văn bản qua TCP. Khá dễ. Tôi muốn làm như vậy với akka. Tôi đọc bài viết này về akka IO: http://doc.akka.io/docs/akka/snapshot/scala/io-tcp.htmlMáy khách TCP của Akka: Làm cách nào để gửi tin nhắn qua TCP bằng cách sử dụng diễn viên akka

Bài viết trình bày một thực hiện đơn giản của một khách hàng TCP, nhưng nó không rõ ràng làm thế nào tôi sẽ sử dụng khách hàng này.

  1. Hàm tạo có một InetSocketAddress và ActorRef. InetSocketAddress có ý nghĩa (Tôi cho rằng đây là đích đến) nhưng ActorRef là gì? đây là lần đầu tiên tôi sử dụng akka, nhưng từ những gì tôi hiểu, ActorRef là tài liệu tham khảo của một diễn viên khác. Vì máy khách TCP của tôi là một diễn viên, và tôi mong đợi diễn viên TCP này giao tiếp với một máy chủ TCP, không phải với một diễn viên khác, tại sao tôi lại cho nó một diễn viên ref?

  2. chức năng đạo cụ là gì trong đối tượng đồng hành?

  3. khi đã được khởi tạo, làm cách nào để sử dụng diễn viên này để gửi tin nhắn TCP? Tôi có nên gửi tin nhắn với dữ liệu tôi muốn gửi dưới dạng một ByteString không?

4. kết nối/chênh lệch giữa

case Received(data) => 
    listener ! data 

case data: ByteString => 
    connection ! Write(data) 

Trả lời

7

Trả lời câu hỏi của bạn là gì:

  1. Các constructor class Client(remote: InetSocketAddress, listener: ActorRef) extends Actor mất một listener là tham chiếu đến một diễn viên đang sử dụng số Client này để liên lạc với máy chủ từ xa. Người nghe sẽ gửi và nhận tin nhắn qua số Client này. Vì Client là một diễn viên, bạn sẽ liên lạc với nó chỉ bằng cách gửi tin nhắn. Điều tương tự cũng áp dụng cho số Client khi giao tiếp với connection/từ xa - nó sẽ gửi và nhận thư thay cho bạn và chuyển tiếp chúng đến số listener mà bạn đã cung cấp.
  2. props chức năng trong đối tượng đồng hành của một lớp diễn viên thường được sử dụng như một hàm trợ giúp để xây dựng một diễn viên. Nó là cần thiết nếu diễn viên của bạn có các đối số hàm tạo và bạn phải cẩn thận để không đóng trạng thái có thể thay đổi được. Hãy nhớ rằng bạn không thể sử dụng toán tử new để tạo diễn viên, bạn phải gọi Props.
  3. Diễn viên Client của bạn sẽ nhận được thông báo loại ByteString như trong case data: ByteString => sau khi kết nối với điều khiển từ xa. Nó sẽ ghi dữ liệu đó vào kết nối TCP - gửi tin nhắn hiệu quả. Bất cứ khi nào nhận được phản hồi từ điều khiển từ xa loại Received như trong case Received(data) =>, nó sẽ chuyển tiếp phản hồi đó tới diễn viên listener của bạn.
  4. Xem 3. Client diễn viên nhận thư từ listener của bạn và từ connection và chuyển tiếp chúng cho phù hợp. Nó không kiểm tra tuy nhiên họ đến từ đâu. Vì vậy, bất cứ khi nào nó nhận được ByteString nó sẽ gửi nó đến connection/từ xa và bất cứ khi nào nó nhận được Received, nó sẽ gửi byte đến listener. Bạn cần phải chắc chắn rằng người nghe của bạn có thể nhận được những tin nhắn này nếu bạn muốn có 2 cách giao tiếp.

Để tóm tắt ở đây là giao tiếp 2 chiều trông như thế nào.

Gửi ByteString từ xa:

MyActor ->ByteString -> Client ->Write(ByteString) -> Kết nối/từ xa

Nhận ByteString từ xa (cuộc đàm phán máy chủ cho khách hàng):

kết nối/từ xa ->Received(ByteString) -> Khách hàng ->ByteString -> MyActor

trong đó '->' là thư gửi.

+2

Giải thích tuyệt vời! Lạ lùng là tôi không hiểu toàn bộ quá trình từ bản mô tả tài liệu. – ipoteka

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