java mina框架教程_java mina框架的使用和一些自己的理解

@(java 技術筆記)

java mina框架的使用和一些自己的理解

1、什么是mina框架及為什么用mina?

官網的解釋為:

Apache Mina Server 是一個網絡通信應用框架,也就是說,它主要是對基於 TCP/IP、UDP/IP協議棧的通信框架(當然,也可以提供 JAVA 對象的序列化服務、虛擬機管道通信服務等),Mina 可以幫助我們快速開發高性能、高擴展性的網絡通信應用,Mina 提供了事件驅動、異步(Mina 的異步 IO 默認使用的是 JAVA NIO 作為底層支持)操作的編程模型。

我自己的理解:

java socket是阻塞的,所以我們要開發高效的網絡通信應用需要使用NIO, 但是NIO的使用操作起來比較復雜。所以mina可以簡單理解為基於Nio的網絡框架。

2、Mina的用法及一些自己的理解?

下面這個是mina 官網對於mina服務端框架的說明:

ff59f27939e80d837d67566efcf2b1a7.png

圖中可以分析出mina服務端框架,可以分為3層。 I/O Acceptor作為連接的接收器, IO Filter作為消息過濾器,I/O Handler作為消息的處理器。

結合這種理解,mina服務器的構建代碼就可以簡化為下面5步。其中MyServerHandler是自定義的類,繼承自mina的org.apache.mina.core.service.IoHandlerAdapter類。

還有一點就是,mina框架中,服務器和客戶端的連接狀態及交互是用IoSession對象進行的,mina會為每一個客戶端連接創建一個IoSession對象,然后把他保存到內存中。直到這個連接斷開。try {

// 第一步 構建socekt連接對象NioSocketAcceptor

NioSocketAcceptor acceptor=new NioSocketAcceptor();

// 第二步設置消息處理器,可以自定義

acceptor.setHandler(new MyServerHandler());

//第三步 設置消息過濾器,可以自定義

acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));

//第四步 設置連接對象 session的相關設置

acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 3);

//第五步 綁定服務器端口,並啟動服務器

acceptor.bind(new InetSocketAddress(9898));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

自定義的消息處理器:

mina的消息處理器常用的幾個方法如下,方法的作用和方法名基本相同。 需要注意的就是,每個消息處理器的回調中都包含一個IoSession對象, 每一個客戶端連接對應一個IoSession對象。public class MyServerHandler extends IoHandlerAdapter {

public void exceptionCaught(IoSession session, Throwable cause)

throws Exception {

System.out.println("exceptionCaught");

}

public void messageReceived(IoSession session, Object message)

throws Exception {

String s=(String)message;

System.out.println("messageReceived:"+s);

session.write("server reply:"+ s);

}

public void messageSent(IoSession session, Object message) throws Exception {

String s=(String)message;

System.out.println("messageSent:"+s);

}

public void sessionClosed(IoSession session) throws Exception {

System.out.println("sessionClosed");

}

public void sessionCreated(IoSession session) throws Exception {

System.out.println("sessionCreated");

System.out.println("session:"+session.toString());

}

public void sessionIdle(IoSession session, IdleStatus status)

throws Exception {

System.out.println("sessionIdle");

}

public void sessionOpened(IoSession session) throws Exception {

System.out.println("sessionOpened");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值