java通訊框架mina的使用
阿新 • • 發佈:2019-02-17
什麼事mina?
mina是基於nio開發出來的一個無阻塞高效能通訊框架,能夠處理socket無法解決的高併發問題。
mina的下載
.將下載好的壓縮包進行解壓,將dist資料夾下的mina-core-2.0.14.jar檔案和lib檔案下slf4j-api-1.7.21.jar檔案匯入到你的web專案中
package com.example.server; import java.io.IOException; import java.net.InetSocketAddress; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class MinaServer { public static void main(String[] args) { // TODO Auto-generated method stub try { //第一步 建立一個NioSocketAcceptor 物件 NioSocketAcceptor acceptor=new NioSocketAcceptor(); //第二步設定handler acceptor.setHandler(new MyServerHandler()); //第三步,獲取攔截器,發來的訊息都需要通過攔截器攔截之後才能接收到 //新增一個攔截器對資料進行加解碼TextLineCodecFactory() acceptor.getFilterChain().addLast("codeFilter" ,new ProtocolCodecFilter(new TextLineCodecFactory()));; //第四步,繫結埠號 acceptor.bind(new InetSocketAddress(9898)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
handler物件
package com.example.server; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; public class MyServerHandler extends IoHandlerAdapter { //異常的處理 @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { // TODO Auto-generated method stub super.exceptionCaught(session, cause); System.out.println("exceptionCaught"); } @Override public void inputClosed(IoSession session) throws Exception { // TODO Auto-generated method stub super.inputClosed(session); } @Override public void messageReceived(IoSession session, Object message) throws Exception { // TODO Auto-generated method stub super.messageReceived(session, message); } @Override public void messageSent(IoSession session, Object message) throws Exception { // TODO Auto-generated method stub super.messageSent(session, message); } @Override public void sessionClosed(IoSession session) throws Exception { // TODO Auto-generated method stub super.sessionClosed(session); } @Override public void sessionCreated(IoSession session) throws Exception { // TODO Auto-generated method stub super.sessionCreated(session); } // 這個方法是在伺服器空閒狀態的時候呼叫的 @Override public void sessionIdle(IoSession session, IdleStatus status) throws Exception { // TODO Auto-generated method stub super.sessionIdle(session, status); } @Override public void sessionOpened(IoSession session) throws Exception { // TODO Auto-generated method stub super.sessionOpened(session); } }
以上的程式碼基本上就可以代替原生的socket伺服器端的寫法了,至於接收端的用法可以用socket實現也可以用其他的方式實現