【发布时间】:2015-03-27 04:24:06
【问题描述】:
直接使用 ChannelInitializer 比直接使用 ChannelHandler 链有什么优势?
例如,我可以使用服务器引导程序:
bootstrap.childHandler(channel_handler);
添加channel_handler的实现我会实现以下
class simple_channel_handler implements ChannelHandler
{
public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
// TODO Auto-generated method stub
System.out.println("handler added");
ctx.pipeline().addLast(new simple_channel_handler_2());
}
}
在 ChannelInitializer 的情况下
ch.pipeline().addLast(
new channel_handler_1(),
new channel_handler_2()
);
在每个处理程序中我都可以做到
class channel_handler_1 extends ChannelInboundHandlerAdapter
{
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
// TODO Auto-generated method stub
System.out.println("Channel just became active");
ctx.fireChannelRead(ctx); // Fire directly to channel handler 2
}
}
那么通道处理程序不需要了解它在哪里触发通道读取的唯一优势是什么?我没有看到使用通道初始化器的任何其他优势
【问题讨论】: