2017-10-16 120 views
0

我有一個ChannelOutboundHandlerAdapter,它覆蓋了方法write。什麼是調用父類的方法write之間的差異:Netty ChannelOutboundHandlerAdapter寫入

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); 
    } 
} 

回答

1

您可以檢查ChannelOutboundHandlerAdapter#writesource code,以確定這一點。它調用同時傳遞消息上下文寫,並承諾:

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

因此,首先明顯的差別是promise沒有傳遞到環境。

在長期的區別將是:

  1. 調用super方法,則需要裝飾write方法。當你想添加一些額外的行爲到標準的時候你應該這樣做。那麼如果以後ChannelOutboundHandlerAdapter源代碼將會改變你的類將仍然只是增加它的功能。
  2. 當您直接致電ChannelHandlerContext時,您正在替換原始實施。所以它將完全獨立於基類方法的變化。
相關問題