0

Apache Mina 的过滤器如何处理不同的请求?比如我有两个请求:LoginRequest 和 StudentRequest,我写了对应的工厂:LoginCodecFactory 和 StudentCodecFactory。然后我将它们添加到过滤器中:

acceptor.getFilterChain().addLast("protocol", new ProtocolCodecFilter(new LoginCodecFactory(false)));
    acceptor.getFilterChain().addLast("protocoltest", new ProtocolCodecFilter(new StudentCodecFactory(false)));

这不行……那么如何让过滤器在运行时拿起对应的工厂来处理请求呢?

4

1 回答 1

0

我认为您正试图在过滤器中加入太多逻辑。根据文档,使用过滤器将 IoBuffer 转换为某些特定于应用程序的对象(例如通用请求对象)是合适的,但是过滤器的工作已经完成,并且应该将这个新对象传递给 IoHandler。

在此设计中,单个过滤器将处理每个传入的 IoBuffer 并以相同的方式对其进行转换。由于只有一个过滤器,选择哪个过滤器的问题就没有了。

然后 IoHandler 接收所有传入的请求,找出哪个是 LoginRequest、StudentRequest 等并适当地处理它。请求对象的设计和确定请求类型的逻辑是应用程序的一部分,而不是 MINA 的一部分,因此您可以以任何您想要的方式实现它。

于 2013-09-12T00:47:58.497 回答