在Netty中创建子或嵌套通道/管道?

时间:2018-04-11 22:28:09

标签: netty

在Netty 4.1中,是否可以创建子或嵌套通道/管道?

,例如,我有一个管道,其中安装了各种编解码器以进行协议/序列化。在管道的最后,我将消息传递给我的应用程序级逻辑。过度简化的例子:

@Override
protected void channelRead0(ChannelHandlerContext ctx, Request request) throws Exception {
    try {
        Response response = applicationLogic.handle(request);
        ctx.writeAndFlush(response);
    } catch (Exception e) {
        log.error(e);
    }
}

此applicationLogic的句柄方法可以执行它想要的任何顺序逻辑。这清楚地区分了我的应用程序级逻辑,但是,我想利用Netty的ChannelPipeline提供的“advanced form of the Intercepting Filter pattern”。我想将Pipeline暴露给我的应用程序级别,以便用户可以轻松添加编解码器,事件侦听器,未捕获的异常处理程序等。

理想情况下,我希望能够创建某种类型的嵌套ChannelPipeline,其头部/尾部将传播到外部管道中。如,

A - > B -> { X -> Y -> Z } -> C

我可以将{ X -> Y -> Z }管道暴露给我的应用程序层,而不关心影响我控制的管道的突变。

有没有干净的方法来模拟这种行为?

1 个答案:

答案 0 :(得分:1)

不需要它,Netty不支持嵌套管道。那就是说你可以动态修改ChannelPipeline并将所需的ChannelHandler放在那里(并删除旧的那些)