如果想通过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画的序列图,不是很规范。备忘。