1:mina之淺談
mina是apache基于socket nio的一套架構,可以從apache官網下載下傳jar包和源碼。試用起來非常友善,也非常強大。如果對socket nio還不是很了解的話:請看一下這兩篇文章
學習bytebuffer和socket nio執行個體
這裡我簡單的介紹一下mina的架構:
IoService:這個接口是網絡的入口,IoAcceptor和IoConnector都實作這個接口。從名字上我們可以看得出來IoAcceptor是接受連結的(服務端),而IoConnector是用來連結的(用戶端)。
IoFilter:過濾器。他是用來過濾消息的。從IoService(網絡接口)出來的資料或者進入IoService(網絡接口)的資料都會經過IoFilter的處理。最重要的就是日志和解碼和編碼。
IoHandler:處理器。它是連結應用和IoFilter的橋梁,是進行業務處理的,從IoFilter出來的資料會發到IoHandler中處理。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yMmFTNlJTM3ImZ0QGMidjYkZDN0gTZyQDNmlDNyEWYz8CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
2:mina執行個體
目标:
不管用戶端發送什麼資料到服務端,服務端口傳回Hello world。
服務端實作
IoHandler:業務處理層
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class ServerHandler extends IoHandlerAdapter{
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception{
System.out.println("報錯啦............");
cause.printStackTrace();
}
@Override
public void messageReceived( IoSession session, Object message ) throws Exception{
String str = message.toString();
System.out.println("messageReceived:"+str);
session.write("hello world");
}
@Override
public void sessionIdle( IoSession session, IdleStatus status ) throws Exception{
System.out.println( "IDLE " + session.getIdleCount( status ));
}
}