Netty ChannelPipelinefactory getPipeline()输入参数

Netty ChannelPipelinefactory getPipeline()输入参数,netty,Netty,我有一个问题,关于可以向getPipeline()提供什么类型的输入 我希望该方法为不同的ip地址返回不同的管道,基本上管道是相同的,但是每个阶段的一些处理程序使用的一些资源可能是相同的,也可能不是相同的,因为客户端ip。 我想共享一个对象,它是基于IP输入到后台(处理程序)的,相同的IP=相同的对象 如果可能的话,我希望这种情况发生在getPipeline()本身。因为ChannelPipelineFactory.getPipeline()不接受任何参数,所以不能使用ChannelPipeli

我有一个问题,关于可以向getPipeline()提供什么类型的输入

我希望该方法为不同的ip地址返回不同的管道,基本上管道是相同的,但是每个阶段的一些处理程序使用的一些资源可能是相同的,也可能不是相同的,因为客户端ip。 我想共享一个对象,它是基于IP输入到后台(处理程序)的,相同的IP=相同的对象


如果可能的话,我希望这种情况发生在getPipeline()本身。

因为
ChannelPipelineFactory.getPipeline()
不接受任何参数,所以不能使用
ChannelPipelineFactory
执行您想要的操作

相反,我建议您使用设置管道的处理程序返回一个新管道。也就是说,通道将从一个具有单个处理程序的管道开始,并且单个处理程序的
channelConnected()
可以将实际的处理程序附加到管道并移除自身

下面是一个例子:

public class MyChannelPipelineFactory implements ChannelPipelineFactory {
    public ChannelPipeline getPipeline() {
        return Channels.pipeline(new MyChannelInitializer());
    }
}

public class MyChannelInitializer extends SimpleChannelUpstreamHandler {
    public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent evt) {
        Channel ch = ctx.getChannel();
        ChannelPipeline p = ch.getPipeline();
        if (matchesA(ch.getRemoteAddress()) { // Protocol A
            p.addLast("A.decoder", new DecoderA());
            p.addLast("A.encoder", new EncoderA());
        } else { // Protocol B
            p.addLast("ssl", new SslHandler(...));
            p.addLast("B.decoder", new DecoderB());
            p.addLast("B.encoder", new EncoderB());
        }
        p.addLast("commonLogic", new CommonLogicHandler());
        p.remove(this);
        ctx.sendUpstream(evt);
    }
}

奇怪的是,为什么getPipeline不能接受任何参数,如果我正确地记住工厂方法模式,它们几乎总是有一些输入参数,根据这些参数,它们返回相关接口的正确实现者。简单地说,这是一个设计错误。:-)