图解Apache Mina
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) throws IOException {
//IoService
final IoAcceptor acceptor = new NioSocketAcceptor();
//IoFilter
acceptor.getFilterChain().addLast("logger",new LoggingFilter());
acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(
//ProtocolCodecFactory
new TextLineCodecFactory(Charset.forName("UTF-8"))));
//IoHandler
acceptor.setHandler(new TimeServerHandler());
//IoService
acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);
acceptor.bind(new InetSocketAddress(PORT));
LOGGER.info("服務端啟動成功,端口:{}",PORT);
}
客戶端
public static void main(String[] args) throws InterruptedException {
//IoConnector
final NioSocketConnector connector = new NioSocketConnector();
connector.setConnectTimeoutMillis(3*1000);
// connector.getSessionConfig().setUseReadOperation(true);
//IoFilter
connector.getFilterChain().addLast("codec",
new ProtocolCodecFilter(
// ProtocolCodecFactory
new ObjectSerializationCodecFactory()));
connector.getFilterChain().addLast("logger",new LoggingFilter());
//IoHandler
connector.setHandler(new TcpClientHandler());
IoSession session = null;
for (;;){
try {
//IoFuture
final ConnectFuture connectFuture = connector.connect(new InetSocketAddress(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();
}
}
主要類圖
附件
圖示具體分析
參考
Apache MINA 官網
說明
附件具標注各個類方法的具體實現,請注意查看
引用請注明出處
總結
以上是生活随笔為你收集整理的图解Apache Mina的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七:策略模式(不同等级会员打折算法)
- 下一篇: Java中float/double取值范