Apache Mina'过滤器如何处理不同的请求? 例如,我有两个请求:LoginRequest和StudentRequest,我编写了相应的工厂:LoginCodecFactory和StudentCodecFactory。然后我将它们添加到过滤器中:
acceptor.getFilterChain().addLast("protocol", new ProtocolCodecFilter(new LoginCodecFactory(false)));
acceptor.getFilterChain().addLast("protocoltest", new ProtocolCodecFilter(new StudentCodecFactory(false)));
这不起作用......那么如何让过滤器拿起相应的工厂来处理运行时的请求?
答案 0 :(得分:0)
我认为您试图在过滤器中加入太多逻辑。基于文档,它适合使用过滤器将IoBuffer转换为某个特定于应用程序的对象(例如,通用的Request对象),然后完成过滤器的工作,并将这个新对象传递给IoHandler。
在此设计中,单个过滤器将处理每个传入的IoBuffer并以相同的方式转换它。由于只有一个过滤器,选择哪个过滤器的问题就消失了。
IoHandler然后接收所有传入的请求,找出哪个是LoginRequest,StudentRequest等并适当地处理它。请求对象的设计和确定它是什么类型的请求的逻辑是应用程序的一部分,而不是MINA的一部分,因此您可以以任何方式实现它。