我开发的服务器有不同的任务,以从客户端接收的消息来执行,有些任务是非常简单,只需要很少的时间来执行,但其他可能需要一段时间。
添加一个ExecutionHandler的管道似乎是复杂的任务,一个好的解决办法,但我想避免穿简单的任务。
我的管道是这样的:
pipeline.addLast("decoder", new MessageDecoder());
pipeline.addLast("encoder", new MessageEncoder());
pipeline.addLast("executor", this.executionHandler);
pipeline.addLast("handler", new ServerHandler(this.networkingListener));
其中MessageEncoder,具体返回一个消息对象( decode
),其限定所请求的任务。
有没有办法跳过基于解码后的信息执行处理程序?
这个问题可以概括为:有没有办法来调节下一个处理程序是否会被使用?
谢谢。
代替使用ExecutionHandler
作为是,可以延长它可用于覆盖其handlerUpstream()
方法来拦截上游事件并调用ctx.sendUpstream(e)
为MessageEvent
(胡)的消息符合指定准则。 所有其他事件可以被处理ExecutionHandler
通过super.sendUpstream(e)
那是:
public class MyExecutionHandler extends ExecutionHandler {
public void handleUpstream(ctx, evt) throws Exception {
if (evt instanceof MessageEvent) {
Object msg = ((MessageEvent) evt).getMessage();
if (msg instanceof ExecutionSkippable) {
ctx.sendUpstream(evt);
return;
}
}
super.handleUpstream(evt);
}
...
}
你可以将其删除(或添加在需要时进行)从MessageDecoder内部管道上游您发送消息前。 您也可以检查您的邮件里面executionHandler,只是通过它的上游。 如果你不能修改这两个文件,你可以创建另一个处理程序根据消息类型从而消除executionHandler。