Apache MINA 是一個用於簡化開發構建高性能、高可擴展的網絡應用框架。經過JAVA NIO在各類傳輸協議(如:TCP/IP、UDP/IP)上提供抽象的事件驅動異步APIapache
Apache MINA能夠稱爲:NIO框架庫、服務端客戶端框架庫、一個網絡套接字庫網絡
爲各類傳輸協議提供統一APIsession
提供相似servlet filter的過濾鏈路支持數據結構
可定製化線程模型架構
開箱即用的 SSL · TLS · StartTLS框架
(Apache MINA在應用中的角色)異步
從圖中能夠看出,只須要關注與MINA的交互而複雜的網絡層處理交由MINA來完成性能
(整體架構)spa
採用三層架構:線程
因此建立一個基於Apache MINA的應用只須要
(服務端架構)
(服務端流程示意)
(客戶端架構)
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(); } }
附件具標註各個類方法的具體實現,請注意查看
引用請註明出處