【问题标题】:Apache Mina set filters for different requestApache Mina 为不同的请求设置过滤器
【发布时间】:2013-09-12 00:12:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: java filter mina


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,谢谢你的回答。我在api中看到了这个类:DemuxingProtocolDecoder。它似乎可以将传入的请求解复用到不同的解码器中。我用谷歌搜索但找不到它的例子。你知道怎么用吗?
    • 不,我从未使用过。好的 - 我刚刚阅读了一些文档。看起来不错。但是 - 如果是我 - 我会坚持 MINA 教程中的简单设计 - 将数据转发到 IoHandler 的简单过滤器。
    猜你喜欢
    • 1970-01-01
    • 2010-12-28
    • 2018-10-20
    • 2021-05-05
    • 2013-03-21
    • 1970-01-01
    • 2012-01-11
    • 2019-04-04
    相关资源
    最近更新 更多