`

Mina详解

    博客分类:
  • Mina
阅读更多

Mina框架技术知识介绍
一.MINA框架简介
1.1Mina是什么东西?

Apache MINA 是一个网络应用框架,有助于用户非常方便地开发高性能、高伸缩性的网络应用。它通过Java NIO提供了一个抽象的、事件驱动的、异步的位于各种传输协议(如TCP/IP和UDP/IP)之上的API,Apache MINA 通常可被称之为:

l         NIO 框架库;
l         客户端/服务器框架库;
l         或者一个网络socket库。

MINA框架的特点有:基于java NIO类库开发;采用非阻塞方式的异步传输;事件驱动;支持批量数据传输;支持TCP、UDP协议;控制反转的设计模式(支持Spring);采用优雅的松耦合架构;可灵活的加载过滤器机制;单元测试更容易实现;可自定义线程的数量,以提高运行于多处理器上的性能;采用回调的方式完成调用,线程的使用更容易。
1.2Mina的框架

当远程客户首次访问采用MINA编写的程序时,IoAcceptor作为线程运行,负责接受来自客户的请求。当有客户请求连接时,创建一个IoSession,该IoSession与IoProcessor、SocketChannel以及IOService联系起来。IoProcessor也作为另外一个线程运行,定时检查客户是否有数据到来,并对客户请求进行处理,依次调用在IOService注册的各个IoFilter,最后调用IoHandler进行最终的逻辑处理,再将处理后的结果Filter后返回给客户端。
1.3Mina的现有应用

   MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、ApacheQpid、QuickFIX/J、Openfire、SubEthaSTMP、red5等。MINA框架当前稳定版本是1.1.6,最新的2.0版本目前已经发布了M1版本。

二.MINA框架具体技术
2.1MINA框架的常用类

1.类NioSocketAcceptor

用于创建服务端监听

2.类NioSocketConnector

用于创建客户端连接;

3.类IoSession

用来保存会话属性和发送消息;可以理解为服务器与客户端的特定连接,该连接由服务器地址、端口以及客户端地址、端口来决定。客户端发起请求时,指定服务器地址和端口,客户端也会指定或者根据网络路由信息自动指定一个地址、自动分配一个端口。这个地址、端口对构成一个Session。



Session是服务器端对这种连接的抽象,MINA对其进行了封装,定义了IoSession接口,用来代表客户端与服务器的连接,在服务器端来指代客户端,实现对客户端的操作、绑定与客户端有关的信息与对象。通过利用Session的这个概念,编写程序时就可以在服务器端非常方便地区分出是当前处理的是哪个客户端的请求、维持客户端的状态信息、可以实现客户端之间相互通讯。

IoSession提供以下一些常用方法:



(1)setAttribute(Object key, Object value)     getAttribute(Object key)

功能说明:设置/获取用户定义的属性。将该属性与session联系起来,方便以后处理用户请求时使用。比如如果要求用户登录后才能继续进行操作,那么在用户成功登陆后,可以通过setAttribute()设置一个属性,当用户以后继续请求时,可以通过getAttribute()获取该属性来判断用户是否登录。

(2)getRemoteAddress()

功能说明:获取远程客户端地址。

(3)getId()

功能说明:获取Session的Id

(4)getCreationTime()

功能说明:获得创建时间

(5)getLastIoTime()

功能说明:获得上次IO时间

(6) getConfig()

功能说明:获得配置信息。

(7)write(Object message)

功能说明:将数据发送给客户端。



(5)close()

功能说明:关闭Session。

(说明:可以在Session中发送数据,但是Session没有提供读取数据的方法,读取数据通过另一套机制在IoHandler的messageReceived()中实现。)

4.类IoHandlerAdapter

从以上MINA框架简图可以看出,对来自客户端数据最终处理是在IoHandler中处理的。IoHandler封装了来自客户端不同事件的处理,如果对某个事件感兴趣,可以实现相应的方法,当该事件发生时,IoHandler中的方法就会被触发执行。

用于定义业务逻辑,常用的方法有:

(1)void exceptionCaught(IoSession session, Throwable cause)

功能说明:有异常发生时被触发。

(2)void messageReceived(IoSession session, Object message)

功能说明:有消息到达时被触发,message代表接收到的消息。

(3)void messageSent(IoSession session, Object message)

功能说明:发送消息时时被触发,即在调用IoSession.write()时被触发,message代表将要发送的消息。

(4)void sessionClosed(IoSession session)

功能说明:当连接关闭时被触发,即Session终止时被触发。

(5)void sessionCreated(IoSession session)

功能说明:当创建一个新连接时被触发,即当开始一个新的Session时被触发。

(6)void sessionIdle(IoSession session, IdleStatus status)

功能说明:当连接空闲时被触发。使用IoSessionConfig中的setIdleTime(IdleStatus status, int idleTime)方法可以设置session的空闲时间。如果该Session的空闲时间超过设置的值,该方法被触发,可以通过session.getIdleCount(status)来获取sessionIdle被触发的次数。

(7)void sessionOpened(IoSession session)

功能说明:当打开一个连接时被触发。在目前的实现中,好像 sessionOpened 和 sessionCreated 没有太大区别,sessionCreated 在 sessionOpened 之前被触发。
IoHandler是一个接口,一般情况没有必要直接实现该接口的每一个方法。MINA提供了一个IoHandlerAdapter类,该类实现了IoHandler要求的方法,但是都没有做任何处理。当我们要编写自己的Handler时,可以扩展IoHandlerAdapter,重写我们关心的事件方法即可。比如,一般情况,我们比较关心是否接收到数据这个时间,那么我们就可以覆盖messageReceived方法,不用管其他方法。

5.类IoFilter

IoFilter用来对客户的请求或发送给客户的数据进行filter。与IoHandler一样,Filter也是基于事件的,通过实现IoFilter接口,就可以对通信过程中的Session的事件进行处理。

6.Event

MINA可以看成是事件驱动的。通常在网络通讯中,可以将整个过程划分为几个基本的阶段,如建立连接、数据通信、关闭连接。

数据通信一般包括数据的发送和接收,由于在通信过程中,可能要多次发送和接收数据,以进行不同的业务交互。不可能一直都接收和发送数据,因此就有Idle出现,在MINA中,如果在设定的时间内没有数据发送或接收,那么就会触发一个Idle事件。由于某种原因,可能会发生错误,导致系统异常发生,引发exception。因此,如果从事件发生的角度看的话,就可以在MINA中将通信看成由一个建立链接(sessionCreated 和 sessionOpened )、多个数据接收和发送、一个关闭连接事件以及多个Idle事件等7种事件组成的过程。

Session是对双方相互通信的抽象,因此通信的过程就是一系列与Session相关的事件。

在MINA现在对TCP的实现中,sessionCreated 和 sessionOpened 没有区别。因此严格来说,有6种类型的事件。
三、代码事例
功能描述:编写一个服务器监听客户机的程序,当客户机访问服务器的时候,服务器输出客户机的访问信息(http),然后将访问信息和第几位客户告诉客户机。
处理器代码:
SamplMinaServerHandler.java
package com.javake.mina.sampleserver;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;
public class SamplMinaServerHandler extends IoHandlerAdapter {
    //当一个客端端连结进入时
     @Override
    public void sessionOpened(IoSession session) throws Exception {
       System.out.println("incomming client : "+session.getRemoteAddress());
    }
     //当一个客户端关闭时
    @Override
    public void sessionClosed(IoSession session) {
    System.out.println("one Clinet Disconnect !");
    }
    //当客户端发送的消息到达时:
    @Override
    public void messageReceived(IoSession session, Object message)
            throws Exception {
    //我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String:
    String s=(String)message;
        // Write the received data back to remote peer
    System.out.println("收到客户机发来的消息: "+s);
    //测试将消息回送给客户端
        session.write(s+count);
        count++;
    }
    private   int count=0;
}
启动服务器的主类:
MainServer.java
package com.javake.mina.sampleserver;
import java.net.InetSocketAddress;
import org.apache.mina.common.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class MainServer {
    public static void main(String[] args) throws Exception {
    //创建一个非阻塞的Server端Socket,用NIO
        SocketAcceptor acceptor = new NioSocketAcceptor();
        //创建接收数据的过滤器
        DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
        //设定这个过滤器将一行一行(/r/n)的读取数据
        chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
        //设定服务器端的消息处理器:一个SamplMinaServerHandler对象,
        acceptor.setHandler(new SamplMinaServerHandler());
         //  服务器端绑定的端口
        int bindPort=9988;
        //绑定端口,启动服务器
        acceptor.bind(new InetSocketAddress(bindPort));
分享到:
评论

相关推荐

    java-mina通信框架详解.docx

    Apache Mina是一个强大的网络通信框架,专为基于TCP/IP和UDP/IP协议栈的应用设计。它提供了JAVA对象的序列化和虚拟机内部通信的功能,使得开发者能够迅速构建高性能、高可扩展性的网络应用。Mina的核心特性是其事件...

    apache mina详细介绍,适合新手入门mina

    ### Apache Mina 详解 #### 一、Apache Mina 概述 Apache Mina 是一个高性能、可扩展的网络通信框架,它简化了基于 TCP/IP 和 UDP/IP 协议栈的网络应用程序的开发过程。Mina 提供了一个事件驱动、异步的操作模式,...

    mina自定义编解码器详解

    **mina自定义编解码器详解** mina是一个Java开发的网络通信框架,广泛应用于TCP和UDP协议的服务器和客户端开发。在mina框架中,编解码器(Codec)扮演着至关重要的角色,它负责将应用层的数据转换为网络传输的字节...

    Android长连接神器框架Mina之服务器和客户端例子

    **Android长连接神器框架Mina详解** Mina框架是一款强大的网络通信框架,广泛应用于Java和Android平台,尤其在实现高性能、高并发的长连接服务中表现出色。它提供了丰富的API和事件驱动模型,使得开发者可以方便地...

    mina框架详解

    # Mina框架详解 ## 一、Mina框架概述 Mina框架,全称为Apache Mina Server,是一款基于Java的高效、可扩展性强大的网络通信应用框架。它主要支持TCP/IP与UDP/IP协议栈,同时也提供了序列化服务、虚拟机管道通信等...

    Mina开源框架 心跳机制详解

    Mina开源框架是一款广泛应用于Java环境的网络通信应用框架,其设计目标是提供一个高度可扩展、高性能且稳定的网络通信接口。在Mina框架中,心跳机制扮演着至关重要的角色,它确保了网络连接的健康性和可靠性。心跳...

    MINA开发文档详解

    ### MINA开发文档详解 #### Apache Mina 2 概述及基础知识 **Apache Mina 2** 是一款用于开发高性能、高可扩展性的网络应用的框架,它为开发者提供了强大的工具来简化网络编程任务。Mina 2 的核心优势在于其事件...

    基于Android开发MINA框架使用详解

    此时,我们可以借助开源框架MINA(Multi-purpose Infrastructure for Network Applications)来构建高效、可扩展的网络应用程序。MINA是一个用Java编写的高性能、异步I/O框架,适用于多种传输协议,如TCP/IP和UDP/IP...

    mina编码器详解

    ### Mina编码器详解 #### 一、引言 Mina是Apache下的一个高效、轻量级的网络通信框架,支持多种传输协议如TCP、UDP等,并提供了丰富的过滤器机制来处理复杂的网络通信任务。其中,`ProtocolCodecFilter`是Mina中...

    MINA_API+MINA_DOC+mina

    MINA (Java IO Network ...总的来说,这个压缩包为初学者提供了一套完整的MINA学习资源,涵盖了理论知识、API详解和实战指导,有助于开发者快速入门并精通MINA框架,从而在实际工作中实现高效、稳定的网络通信应用。

    mina仿qq聊天功能,自定义协议,协议的编码和解码详解,发送xml对象json,mina开发大全,详细api,mina心跳

    mina仿qq聊天功能,自定义协议,协议的编码和解码详解,发送xml对象json,mina开发大全,详细api mina聊天 mina解码编码 mina协议开发 mina仿qq mina消息xml mina开发的在线聊天工具,mina仿qq功能,mina自定义协议,可以...

    mina2.0全部jar包

    《mina2.0全部jar包详解》 Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发Java网络应用,特别是那些基于TCP和UDP协议的...

    spring boot 整合mina 串口

    **Spring Boot 整合Mina实现串口通信详解** 在Java开发中,有时我们需要与硬件设备进行串口通信,例如读取传感器数据或控制工业设备。Spring Boot作为一款轻量级的框架,使得快速构建应用变得简单。而Mina则是一款...

    mina框架资源包

    《mina框架资源包详解——构建即时通讯服务器的关键组件》 Mina框架,全称为Apache Mina,是一款基于Java开发的网络通信应用框架,它提供了一种简单而高性能的方式来构建网络服务,尤其在处理TCP/IP、UDP/IP以及SSL...

    基于spring的Mina框架

    **基于Spring的Mina框架详解** Mina框架是一款高性能、轻量级的网络通信框架,主要应用于开发基于TCP和UDP的网络应用。它提供了一种简单而强大的编程模型,使得开发者能够快速构建出稳定且高效的网络服务。在Spring...

    mina2学习笔记

    #### 一、Mina入门详解 ##### 第一步:下载使用的Jar包 - **mina-core-2.0.0-M1.jar**:这是Mina核心库,提供了NIO框架的基本功能。 - **slf4j-api-1.5.2.jar**:用于日志记录的高级接口,简化了日志记录的过程。 ...

    MINA开发手册和JAR包

    3. **API详解**:详细阐述MINA提供的各种接口和类,以及它们的使用方法。 4. **最佳实践**:分享在实际项目中优化MINA应用的经验和技巧。 5. **示例代码**:通过实例代码展示MINA如何处理常见的网络通信问题。 **...

    MinaClient

    **MinaClient详解** MinaClient,全称为Apache Mina,是一个开源的网络通信框架,主要应用于Java平台。它的设计目标是提供一个高度可扩展、高性能、轻量级的网络应用开发框架,使得开发者能够方便地创建出面向服务...

    Mina2中文文档

    - **IoBuffer详解**:IoBuffer是Mina用于高效内存管理的数据结构,本章节详细讲解了其内部机制和使用方法。 #### Chapter 9 - 编解码器过滤器 - **编解码器**:介绍如何使用Mina提供的编解码器过滤器对网络数据...

Global site tag (gtag.js) - Google Analytics