我试图从我的处理程序管道中删除某个处理程序,但是我在执行它时遇到了麻烦。当我在管道之前和之后列出处理程序时,我试图删除的处理程序仍然存在。那么我在这里做错了什么?这是一段代码片段。所有这些都处于启动阶段。你可以看到我做的最后一件事是配置管道工厂。我使用的是Netty 3.6.1.final。
List<String> handlers = new ArrayList<String>();
// list handlers in the pipeline
try {
handlers = this.pipelineFactory.getPipeline().getNames();
for (int len = handlers.size(), i = 0; i < len; i++) {
String s = handlers.get(i);
System.out.println("Item " + i + " is " + s);
}
} catch( Exception e ) {}
try {
System.out.println("Remove hexdump");
this.pipelineFactory.getPipeline().remove("hexdump");
} catch( Exception e ) {
System.out.println("error = " + e.getMessage());
}
try {
handlers = this.pipelineFactory.getPipeline().getNames();
for (int len = handlers.size(), i = 0; i < len; i++) {
String s = handlers.get(i);
System.out.println("Item " + i + " is " + s);
}
} catch( Exception e ) {}
// Configure the pipeline factory.
this.bootstrap.setPipelineFactory(this.pipelineFactory);
这是输出:
Item 0 is framer
Item 1 is hexdump
Item 2 is handler
Remove hexdump
Item 0 is framer
Item 1 is hexdump
Item 2 is handler
答案 0 :(得分:3)
不确定没有检查完整代码,但看起来像pipelineFactor.getPipeline()将始终在您的情况下创建新管道。自从它成为工厂以来,每次都会创建处理程序。为sysout
添加一个this.pipelineFactory.getPipeline()
,如果您看到3个不同的对象哈希码,那么这就是根本原因。
解决方案可以是pipeline = this.pipelineFactory.getPipeline()
,然后使用pipeline
添加删除等
另外,对于记录而言,似乎错误的用法,您应该使用ChannelHandlerContext
方法或处理程序的decode
方法从messageReceived
对象获取管道。