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#write
的 source code 来确定这一点。它正在调用传递消息和承诺的上下文写入:
@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
ctx.write(msg, promise);
}
所以第一个明显的区别是 promise
没有传递给上下文。
长期的差异是:
- 调用
super
你正在装饰的方法write方法。当您想向标准行为添加一些额外行为时,您应该这样做。然后,如果稍后 ChannelOutboundHandlerAdapter
源将更改,您的 class 仍将只是围绕它添加功能。
- 当您直接调用
ChannelHandlerContext
时,您正在替换原来的实现。因此它将完全独立于基础 class 方法更改。
我有一个 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#write
的 source code 来确定这一点。它正在调用传递消息和承诺的上下文写入:
@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
ctx.write(msg, promise);
}
所以第一个明显的区别是 promise
没有传递给上下文。
长期的差异是:
- 调用
super
你正在装饰的方法write方法。当您想向标准行为添加一些额外行为时,您应该这样做。然后,如果稍后ChannelOutboundHandlerAdapter
源将更改,您的 class 仍将只是围绕它添加功能。 - 当您直接调用
ChannelHandlerContext
时,您正在替换原来的实现。因此它将完全独立于基础 class 方法更改。