Netty ChannelOutboundHandlerAdapter 写入

Netty ChannelOutboundHandlerAdapter write

我有一个 ChannelOutboundHandlerAdapter 覆盖方法 write。调用parentclasswrite方法有什么区别:

public class MyChannelOutboundHandler extends ChannelOutboundHandlerAdapter {
    @Override
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {
    //some code
    super.write(ctx, anotherMessage, promise);
    }
}

和调用上下文 write?:

public class MyChannelOutboundHandler extends ChannelOutboundHandlerAdapter {
    @Override
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {
    //some code
    ctx.write(anotherMessage);
    }
}

您可以检查 ChannelOutboundHandlerAdapter#writesource code 来确定这一点。它正在调用传递消息和承诺的上下文写入:

@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
    ctx.write(msg, promise);
}

所以第一个明显的区别是 promise 没有传递给上下文。

长期的差异是:

  1. 调用super你正在装饰的方法write方法。当您想向标准行为添加一些额外行为时,您应该这样做。然后,如果稍后 ChannelOutboundHandlerAdapter 源将更改,您的 class 仍将只是围绕它添加功能。
  2. 当您直接调用 ChannelHandlerContext 时,您正在替换原来的实现。因此它将完全独立于基础 class 方法更改。