等待多步骤连接过程与Netty一起完成

等待多步骤连接过程与Netty一起完成,netty,Netty,如果我在Netty 101期间睡着了,请原谅,但我想知道是否有一种“正确”的方法来等待多步骤连接过程与Netty一起完成。假设我有一个应用程序,其中的过程如下: 打开实际连接 执行TLS握手 执行一些应用程序级握手,以确认客户端和服务器都在使用FancyProtocol 2.8(或其他版本) 当我调用Bootstrap#connect()时,我会得到一个ChannelFuture。我的理解是,ChannelFuture将在第1步(仅打开连接)完成后成功,但我们仍需要通过某种方式等待第2步和第3步

如果我在Netty 101期间睡着了,请原谅,但我想知道是否有一种“正确”的方法来等待多步骤连接过程与Netty一起完成。假设我有一个应用程序,其中的过程如下:

  • 打开实际连接
  • 执行TLS握手
  • 执行一些应用程序级握手,以确认客户端和服务器都在使用FancyProtocol 2.8(或其他版本)
  • 当我调用
    Bootstrap#connect()
    时,我会得到一个
    ChannelFuture
    。我的理解是,
    ChannelFuture
    将在第1步(仅打开连接)完成后成功,但我们仍需要通过某种方式等待第2步和第3步

    我过去所做的是创建一个次要的“一切都完成了”
    承诺,并在第3步完成后立即通知该承诺(或者如果在此期间出现任何失败)。这已经足够好了,但当Netty可能已经有了处理这种情况的机制时,他会有一种做事情很艰难的感觉

    因此,我想这就是我的问题:有没有更好的方法等待多步骤连接过程完成


    谢谢

    应用程序级握手属于应用程序级处理程序,在netty处理程序中,使用处理程序中的channelActive(ChannelHandlerContext)方法很容易捕获“connect”事件

    例如:

    public class ApplicationLogicHandler extends ChannelInboundHandler {
        @Override
        public void channelActive(ChannelHandlerContext ctx) throws Exception {
            super.channelActive(ctx);
            ctx.writeAndFlush(new MyApplicationLogicPacket());
        }
    }
    

    谢谢你的回复!我认为我们已经很好地控制了实际的应用程序级握手。我的问题更多的是让管道之外的呼叫者知道应用程序级握手已经完成。可能说得有点太具体了:是否有一种好的方法可以推迟,例如,在应用程序级握手完成之前完成连接承诺?