Java NIO框架Mina
生活随笔
收集整理的這篇文章主要介紹了
Java NIO框架Mina
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
真羨慕java有系列的懶人框架,雖然c也有Netty, ACE等高速網絡框架,但是語言的特性,決定了java框架之間更好集成,更加廉價。
上一個我的測試代碼:
/***?*/ package?com.jinbao.MinaDemo;import?java.io.IOException; import?java.net.InetSocketAddress; import?java.nio.charset.Charset;import?org.apache.mina.core.service.IoAcceptor; import?org.apache.mina.core.service.IoHandlerAdapter; import?org.apache.mina.core.session.IoSession; import?org.apache.mina.filter.codec.ProtocolCodecFilter; import?org.apache.mina.filter.codec.textline.TextLineCodecFactory; import?org.apache.mina.transport.socket.nio.NioSocketAcceptor;/***?@author?zhuji06**/ public?class?MinaService?extends?IoHandlerAdapter?{//有消息到達時會調用此方法@Overridepublic?void?messageReceived(IoSession?session,?Object?message)?throws?Exception?{System.out.println("Server?Received?:?"?+?message);session.write("Im?Server?["?+?System.currentTimeMillis()?+?"]");}//有消息即發送出去時會調用此方法@Overridepublic?void?messageSent(IoSession?session,?Object?message)?throws?Exception?{System.out.println("Server?Sent?:?"?+?message);}public?static?void?main(String[]?args)?throws?IOException?{//1?創建服務端借口實例,服務端就是acceptor(貌似MINA3會改)IoAcceptor?acceptor?=?new?NioSocketAcceptor();//2?設置IoHandler,handler是處于上層的其直接對應邏輯處理acceptor.setHandler(new?MinaService());//3?添加消息過濾器acceptor.getFilterChain().addLast("decode",?new?ProtocolCodecFilter(new?TextLineCodecFactory(Charset.forName("UTF-8"))));//4?設置session緩存大小//5?設置連接空閑時間單位秒//6?開始監聽acceptor.bind(new?InetSocketAddress("localhost",?9696));} }客戶端:
/***?*/ package?com.jinbao.MinaDemo;import?java.net.InetSocketAddress; import?java.nio.charset.Charset;import?org.apache.mina.core.future.ConnectFuture; import?org.apache.mina.core.service.IoConnector; import?org.apache.mina.core.service.IoHandler; import?org.apache.mina.core.service.IoHandlerAdapter; import?org.apache.mina.core.session.IoSession; import?org.apache.mina.filter.codec.ProtocolCodecFilter; import?org.apache.mina.filter.codec.textline.TextLineCodecFactory; import?org.apache.mina.transport.socket.nio.NioSocketConnector;/***?@author?zhuji06**/ public?class?MinaClient?extends?IoHandlerAdapter?{public?static?boolean?received?=?false;@Overridepublic?void?messageReceived(IoSession?session,?Object?message)?throws?Exception?{System.out.println("Client?Received?:?"?+?message);received?=?true;}@Overridepublic?void?messageSent(IoSession?session,?Object?message)?throws?Exception?{System.out.println("Client?Sent?:?"?+?message);}public?static?void?main(String[]?args)?{//1?客戶端實例對應的接口是IoConnectorIoConnector?connector?=?new?NioSocketConnector();//2?handlerIoHandler?handler?=?new?MinaClient();connector.setHandler(handler);//3?添加消息過濾器connector.getFilterChain().addLast("codec",?new?ProtocolCodecFilter(new?TextLineCodecFactory(Charset.forName("UTF-8"))));//4?開始連接服務器端//這里和服務器端編碼有所不同,由于MINA采用非阻塞模式,//所以客戶端連接服務端是非阻塞的,即connect()方法調用后執行線程會立即執行下面的代碼。//但connect()會返回一個ConnectFuture對象,使用它可以判斷是否已經建立連接ConnectFuture?future?=?connector.connect(new?InetSocketAddress("localhost",?9696));//5?等待直到連接建立future.awaitUninterruptibly();//6?得到sessionIoSession?session?=?future.getSession();//7?session.write()將一個對象發送出去,至于對象如何變成二進制那是編碼解碼器干的事情,后面會介紹的session.write("Hello!?i`m?Client");//等待服務器回饋的消息while?(!received)?{//消息還沒來我就一直睡!睡啊睡!try?{Thread.sleep(2);}?catch?(InterruptedException?e)?{e.printStackTrace();}}//8?關閉客戶端連接connector.dispose(true);}}轉載于:https://my.oschina.net/zhujinbao/blog/220729
總結
以上是生活随笔為你收集整理的Java NIO框架Mina的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL(MariaDB)之参数详解(
- 下一篇: JavaMail发送简单邮件