NIO流行框架 Mina 体系结构介绍

1.Mina在应用程序中处于什么样的地位


主要屏蔽了网络通信的一些细节,对sokcet进行封装,并且是NIO的一个实现架构.可以帮助我们快速的开发网络通信.常常用户游戏的开发,中间件等服务端程序.
 
2.IOService接口


用于描述我们的客户端和服务端接口,其子类是connector和Accptor,分别用于描述我们的客户端和服务端.
IOproceser多线程环境来处理我们的连接请求流程.
ioFilter提供数据的过滤工作:包括编解码,日志等信息的过滤.
Hanlder就是我们的业务对象,自定义的handler需要实现IOHandlderAcceptor。
 
3.大致看看我的类图结构
                         


                                       IOService
                  IOconnector                  IOAccptor 
               
                  NIOSocketConnector        NIOSocketAcceptor
 
IOsession:描述的是客户端和服务端连接的描述.常常用户接受和发送数据.
 
4.Mina通信流程


1)IOconnector->IOProcessor->IOFilter->Handler   
2)IOAccptor ->IOProcessor->IOFilter->Handler


5.长连接:


通信双发长期的保持一个连接状态不断开,比如腾讯qq,当我们登录qq的时候,我们就去连接我们腾讯服务器,一旦建立连接后,就不断开.除非发生异常,这样方式就是长连接,对于长连接比较耗费IO资源.
 
6.短连接:


通信双方不是保持一个长期的连接状态,比如http协议,当客户端发起http请求,服务器处理http请求,当服务器处理完成后,返回客服端数据后就断开链接,对于下次的连接请求需要重新发起.这种方式使我们长使用的方式.


对我们的程序进行改造

package com.ccop;

import java.util.Date;

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 sessionCreated(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		super.sessionCreated(session);
		System.out.println("ServerHandler.sessionCreated()");
	}

	@Override
	public void sessionOpened(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		super.sessionOpened(session);
		System.out.println("ServerHandler.sessionOpened()");
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		super.sessionClosed(session);
		System.out.println("ServerHandler.sessionClosed()");
	}

	@Override
	public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
		// TODO Auto-generated method stub
		super.sessionIdle(session, status);
		System.out.println("ServerHandler.sessionIdle()");
	}

	/**
	 * 异常
	 */
	@Override
	public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
		// TODO Auto-generated method stub
		super.exceptionCaught(session, cause);
		System.out.println("ServerHandler.exceptionCaught()");
	}

	@Override
	public void messageReceived(IoSession session, Object message) throws Exception {
		// TODO Auto-generated method stub
		String msg = (String) message;
		System.out.println("服务端接收到数据:"+msg);
	/*	if(msg.equals("exit")){
			session.close();
		}*/
		Thread.sleep(2000);
		Date date =new Date();
		session.write(date);
	}

	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		// TODO Auto-generated method stub
		//super.messageSent(session, message);
		//数据发送之后 关闭连接 就是短链接
		session.close();
	}

	@Override
	public void inputClosed(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		super.inputClosed(session);
	}

}


1.IOService:


实现了对网络通信的客户端和服务端之间的抽象,用于描述客户端的子接口IOConnector,用于描叙服务端的子接口IOAcceptor.
 
2.IOService的作用:


IOService可以管理我们网络通信的客户端和服务端,并且可以管理连接双方的会话seession,同样可以添加过滤器.
 
3.IOService类结构:


通过扩展子接口和抽象的子类到达扩展的目的.
              IOService              
 IOAcceptor            IOConnector    
            abstractIoServci
 
abstractIOAcceptor       abstract IOConnector
 
NioSocketAcceptor        NioSocketConnector


 
7.相关API

IOService常用API定义一些抽象的接口,可以获得我们的过滤器
1)getFilterChain() 获得过滤器链
2)setHandler(IoHandler handler) 设置我们真正业务handler
 
3)getSessionConfig() 得到我们会话的配置信息.
4)dispose() 在我们完成关闭连接的时候 所调用的方法.
 
2.IOConnetor
1)connect(SocketAddress remoteAddress) 主要用户发起一个连接请求.
2)setConnectTimeout(int connectTimeout) 连接超时的设置
 
3.IoAcceptor
1)bind(SocketAddress localAddress) 绑定端口.
2)getLocalAddress()  获得本地ip地址
 
4.NioSocketAcceptor API
 1)accept(IoProcessor processor, ServerSocketChannel handle)  接受一个连接.
2)open(SocketAddress localAddress)  打开一个socketchannel
3)select()   获得我们的选择器
 
5.NIOSocketConnector API
1)connect(SocketChannel handle, SocketAddress remoteAddress)  用于描述连接请求
 
2)register(SocketChannel handle, AbstractPollingIoConnector.ConnectionRequest request)     注册我们的IO事件
 
3)select(int timeout)   返回选择器


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值