日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java NIO框架Mina

發(fā)布時間:2024/4/15 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java NIO框架Mina 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

真羨慕j(luò)ava有系列的懶人框架,雖然c也有Netty, ACE等高速網(wǎng)絡(luò)框架,但是語言的特性,決定了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?{//有消息到達(dá)時會調(diào)用此方法@Overridepublic?void?messageReceived(IoSession?session,?Object?message)?throws?Exception?{System.out.println("Server?Received?:?"?+?message);session.write("Im?Server?["?+?System.currentTimeMillis()?+?"]");}//有消息即發(fā)送出去時會調(diào)用此方法@Overridepublic?void?messageSent(IoSession?session,?Object?message)?throws?Exception?{System.out.println("Server?Sent?:?"?+?message);}public?static?void?main(String[]?args)?throws?IOException?{//1?創(chuàng)建服務(wù)端借口實(shí)例,服務(wù)端就是acceptor(貌似MINA3會改)IoAcceptor?acceptor?=?new?NioSocketAcceptor();//2?設(shè)置IoHandler,handler是處于上層的其直接對應(yīng)邏輯處理acceptor.setHandler(new?MinaService());//3?添加消息過濾器acceptor.getFilterChain().addLast("decode",?new?ProtocolCodecFilter(new?TextLineCodecFactory(Charset.forName("UTF-8"))));//4?設(shè)置session緩存大小//5?設(shè)置連接空閑時間單位秒//6?開始監(jiān)聽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?客戶端實(shí)例對應(yīng)的接口是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?開始連接服務(wù)器端//這里和服務(wù)器端編碼有所不同,由于MINA采用非阻塞模式,//所以客戶端連接服務(wù)端是非阻塞的,即connect()方法調(diào)用后執(zhí)行線程會立即執(zhí)行下面的代碼。//但connect()會返回一個ConnectFuture對象,使用它可以判斷是否已經(jīng)建立連接ConnectFuture?future?=?connector.connect(new?InetSocketAddress("localhost",?9696));//5?等待直到連接建立future.awaitUninterruptibly();//6?得到sessionIoSession?session?=?future.getSession();//7?session.write()將一個對象發(fā)送出去,至于對象如何變成二進(jìn)制那是編碼解碼器干的事情,后面會介紹的session.write("Hello!?i`m?Client");//等待服務(wù)器回饋的消息while?(!received)?{//消息還沒來我就一直睡!睡啊睡!try?{Thread.sleep(2);}?catch?(InterruptedException?e)?{e.printStackTrace();}}//8?關(guān)閉客戶端連接connector.dispose(true);}}


轉(zhuǎn)載于:https://my.oschina.net/zhujinbao/blog/220729

總結(jié)

以上是生活随笔為你收集整理的Java NIO框架Mina的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。