我正在开发的服务器根据从客户端收到的消息执行不同的任务,某些任务非常简单,需要很少的时间来执行,而其他的则可能需要一些时间。

将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/

10-10 08:16