Apache MINA 是一个用于简化开发构建高性能、高可扩展的网络应用框架。通过JAVA NIO在各种传输协议(如:TCP/IP、UDP/IP)上提供抽象的事件驱动异步API
Apache MINA可以称为:NIO框架库、服务端客户端框架库、一个网络套接字库
特性
为各种传输协议提供统一API
提供类似servlet filter的过滤链路支持
可定制化线程模型
开箱即用的 SSL · TLS · StartTLS
超载保护和传输流量控制
易于集成(如:与Spring集成)
可平滑过渡到Netty
...
(Apache MINA在应用中的角色)
从图中可以看出,只需要关注与MINA的交互而复杂的网络层处理交由MINA来完成
Apache MINA架构
(总体架构)
采用三层架构:
I/O Service - 执行实际 I/O处理
I/O Filter Chain - 将字节过滤/转换为所需的数据结构,反之亦然
I/O Handler - 应用层实现逻辑的地方
所以创建一个基于Apache MINA的应用只需要
创建an I/O service - 选择合适的Acceptor或自定义
创建 a Filter Chain - 转换请求响应
创建 an I/O Handler - 处理不同的消息
(服务端架构)
(服务端流程示意)
(客户端架构)
案例分析
服务端
public static void main(String[] args) throwsIOException {//IoService
final IoAcceptor acceptor = newNioSocketAcceptor();//IoFilter
acceptor.getFilterChain().addLast("logger",newLoggingFilter());
acceptor.getFilterChain().addLast("codec",newProtocolCodecFilter(//ProtocolCodecFactory
new TextLineCodecFactory(Charset.forName("UTF-8"))));//IoHandler
acceptor.setHandler(newTimeServerHandler());//IoService
acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);
acceptor.bind(newInetSocketAddress(PORT));
LOGGER.info("服务端启动成功,端口:{}",PORT);
}
客户端
public static void main(String[] args) throwsInterruptedException {//IoConnector
final NioSocketConnector connector = newNioSocketConnector();
connector.setConnectTimeoutMillis(3*1000);//connector.getSessionConfig().setUseReadOperation(true);//IoFilter
connector.getFilterChain().addLast("codec",newProtocolCodecFilter(//ProtocolCodecFactory
newObjectSerializationCodecFactory()));
connector.getFilterChain().addLast("logger",newLoggingFilter());//IoHandler
connector.setHandler(newTcpClientHandler());
IoSession session= null;for(;;){try{//IoFuture
final ConnectFuture connectFuture = connector.connect(newInetSocketAddress(HOST, PORT));
connectFuture.awaitUninterruptibly();
session=connectFuture.getSession();break;
}catch(RuntimeIoException e){
System.err.println("failed connected");
e.printStackTrace();
Thread.sleep(5000);
}
session.getCloseFuture().awaitUninterruptibly();//IoProcessor
connector.dispose();
}
}
主要类图
附件
参考
说明
附件具标注各个类方法的具体实现,请注意查看
引用请注明出处
原文:https://www.cnblogs.com/imaikce/p/11805402.html