我有一个 akka i/o TCP 服务器,它在客户端连接上应该启动与另一台服务器的进一步(客户端)连接。
我想采用的方法是 -> TCP Actor -> Listen -> 对于每个成功的连接启动一个新的 client-actor,然后传递对等方之间的所有通信
在 TCP 服务器上处理客户端工作正常。但是,每当我启动另一个演员来连接到第二台服务器时,可以建立连接但从不响应,最终它会遇到
case _: ConnectionClosed ⇒ context stop self;
我很难进入它,因为在线没有太多明确的文档。我的客户主要代表文档中的客户示例。
(侦听器参数是客户端-服务器参与者。)
class ClientTransProxyHandler(remote: InetSocketAddress, listener: ActorRef) extends Actor {
import Tcp._
import context.system
IO(Tcp) ! Connect(remote)
def receive = {
case CommandFailed(_: Connect) ⇒
listener ! "failed"
context stop self
case c @ Connected(remote, local) ⇒
val connection = sender
connection ! Register(self)
context become {
case data: ByteString ⇒
connection ! Write(data);
case CommandFailed(w: Write) ⇒ // O/S buffer was full
case Received(data) ⇒
listener ! data; println(data);
case "close" ⇒
connection ! Close;
case _: ConnectionClosed ⇒ context stop self;
}
}
}
当我进入常规时,连接似乎开始了。但是当我这样做时它从不发送任何东西
client ! data // where data is what i got initially from the client
我什至不确定这是否会被发送。
谢谢你!
完整源代码可以在https://github.com/AlessandroEmm/SNIProxy/blob/master/src/main/scala/SNIProxy/SNIProxy.scala找到