1

我有一个 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找到

4

0 回答 0