如果想通过Mina来实现一个自定义协议的网络应用程序,用户只需要编写自定义协议编解码处理器和业务处理逻辑即可。由于每一个Session关联一个Processor处理线程,多个Session共享有限的Processor线程池,如果Handler中的业务逻辑处理比较耗时,会导致后续请求阻塞等待,严重降低效率,所以,一般会向Acceptor的FilterChain添加一个ExecutorFilter来缓解该问题,典型代码如下:
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
// 日志
LoggingFilter filter = new LoggingFilter();
chain.addLast("logger", filter);
// 协议处理
chain.addLast("codec", new ProtocolCodecFilter(codecFactory));
// 线程池
chain.addLast("executor", new ExecutorFilter(Executors.newCachedThreadPool()));
当server接收到client发送数据后的处理流程如下:
呵呵,用jude画的序列图,不是很规范。备忘。