当它是最后一个处理程序时,应调用ChannelDuplexHandler write方法,但实际上不是。
ChannelPipeline p = ...;
p.addLast("1", new InboundHandlerA());
p.addLast("5", new InboundOutboundHandlerX());
Run Code Online (Sandbox Code Playgroud)
入站和出站事件的评估顺序分别为1.5和5。
所以我认为write在in调用时应ctx.write()在以下类中channelRead调用:
@ChannelHandler.Sharable
@Component
public class InboundOutboundHandlerX extends ChannelDuplexHandler {
@Override
public void channelReadComplete(ChannelHandlerContext ctx) {
ctx.flush();
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ctx.write(msg); // I have also tried writeAndFlush(msg)
}
@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
ctx.write(msg, promise);
}
}
Run Code Online (Sandbox Code Playgroud)
是否有一种特殊的技巧来获取最后一个称为双工处理程序的写方法?
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |