等待Netty

时间:2016-01-06 15:55:33

标签: netty

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

  1. 打开实际连接。
  2. 执行TLS握手。
  3. 进行一些应用程序级握手以确认客户端和服务器都在说FancyProtocol 2.8(或其他)。
  4. 当我致电Bootstrap#connect()时,我会获得ChannelFuture。我的理解是ChannelFuture只要第1步 - 刚刚打开连接就会成功 - 但我们仍然需要通过某种方式等待第2步和第3步。

    我过去所做的是创建一个辅助“一切都已完成”Promise,并在步骤3完成后立即通知该承诺(或者如果在此期间有任何失败)。这种方法运作得很好,但是当Netty可能已经有一个处理这种情况的机制时,他有一种艰难的做事感觉。

    所以,我想,这是我的问题: 有更好的方法等待多步连接过程完成吗?

    谢谢!

1 个答案:

答案 0 :(得分:0)

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

一个例子:

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