1. 程式人生 > >java通訊框架mina的使用

java通訊框架mina的使用

什麼事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實現也可以用其他的方式實現