Sử dụng Scala với Akka IO có cách nào để diễn viên hoàn toàn lắng nghe và sau đó khi kết nối được thiết lập, hãy tạo một diễn viên mới sau đó sẽ chịu trách nhiệm về Socket (Đọc, Viết, v.v ...)?Akka Socket cho mỗi diễn viên
Cho đến giờ tôi có điều này. Vấn đề là diễn viên máy chủ đang nhận dữ liệu. Tôi muốn chuyển quyền sở hữu ổ cắm cho tác nhân Khách hàng mới được tạo ra để nó nhận được bất kỳ thông báo nào liên quan đến socket. Có ai biết làm như thế nào không?
Chỉnh sửa: giải pháp được thêm vào. Tôi chỉ cần chuyển ActorRef vào thông số được chấp nhận của chấp nhận
import akka.actor._
import akka.actor.IO.SocketHandle
import java.net.InetSocketAddress
/**
* Purpose:
* User: chuck
* Date: 17/01/13
* Time: 5:37 PM
*/
object Main {
class Server extends Actor {
override def preStart() {
IOManager(context.system) listen new InetSocketAddress(3333)
}
def receive = {
case IO.NewClient(server) =>
val client = context.actorOf(Props(new Client()))
server.accept()(client)
println("Client accepted")
case IO.Read(socket, bytes) =>
println("Server " + bytes)
}
}
class Client() extends Actor {
def receive = {
case IO.Read(socket, bytes) =>
println("Client " + bytes)
case IO.Closed(socket, reason) =>
println("Socket closed " + reason)
}
}
def main(args: Array[String]) {
val system = ActorSystem()
system.actorOf(Props(new Server))
}
}
Cảm ơn!
những gì đã cố gắng của bạn? vấn đề chính xác là gì? –
Chỉ cần tìm ra val socket = server.accept() cần phải là val socket = server.accept() (client) trong đó client là tác nhân mới được tạo – tkblackbelt
Có công việc đang diễn ra trên một lớp IO mới mà nhóm Akka thiết kế phối hợp với nhóm spray.io sẽ linh hoạt hơn nhiều. Bạn có thể muốn xem xét điều đó khi nó xuất hiện. –