我正在开发的服务器根据从客户端收到的消息执行不同的任务,某些任务非常简单,需要很少的时间来执行,而其他的则可能需要一些时间。
将ExecutionHandler添加到管道中似乎是解决复杂任务的好方法,但我想避免对简单任务进行线程化。
我的管道如下所示:
pipeline.addLast("decoder", new MessageDecoder());
pipeline.addLast("encoder", new MessageEncoder());
pipeline.addLast("executor", this.executionHandler);
pipeline.addLast("handler", new ServerHandler(this.networkingListener));
MessageEncoder返回其中的Message对象(对于
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);
}
...
}
关于java - 管道中的条件ExecutionHandler,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14593192/