ChannelOutboundHandlerAdapter

ChannelOutboundHandlerAdapter

我有一个ChannelOutboundHandlerAdapter覆盖了方法write。调用父类write方法之间有什么区别:

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以确定它。它调用传递消息和promise的上下文写入:

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


因此,第一个明显的区别是promise没有传递给上下文。

从长远来看,差异将是:


调用super方法正在装饰write方法。要在标准行为中添加一些其他行为时,应执行此操作。然后,如果以后ChannelOutboundHandlerAdapter源将更改您的类,则仍将仅在其周围添加功能。
直接调用ChannelHandlerContext时,将替换原始实现。因此它将完全独立于基类方法的更改。

关于java - Netty ChannelOutboundHandlerAdapter写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46773613/

10-09 14:19