`
wan_2004
  • 浏览: 140573 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Apache MINA 使用记录

    博客分类:
  • Java
 
阅读更多

1.Mina的结构

 

Mina的通信流程大致如上图所示,各个组件功能有:
(1.)  IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监
听是否有连接被建立。

 

(Mina底层使用JAVA NIO, 因此它是典型的使用Reactor模式架构的,采用事件驱动编程 , Mina运行用户自定义线程模型,可以是单线程、多线程、线程池等 ,

 

   跟JAVA Socket不一样, Mina是非阻塞的Socket,它内部已经保证了对各个连接(session)的业务和数据的隔离,采用轮询机制为各个session分配CPU资源,

 

  所以,你就不需要再去考虑不同Socket连接需要用不同的线程去操纵的问题了。)

 

(2.)  IoProcessor:这个接口在另一个线程上负责检查是否有数据在通道上读写,也就是
说它也拥有自己的Selector,这是与我们使用JAVA NIO 编码时的一个不同之处,
通常在JAVA NIO 编码中,我们都是使用一个Selector,也就是不区分IoService
与 IoProcessor 两个功能接口。另外,IoProcessor 负责调用注册在IoService 上
的过滤器,并在过滤器链之后调用IoHandler。

 


(3.)  IoFilter:这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、
数据的编码(write 方向)与解码(read 方向)等功能,其中数据的encode 与 decode
是最为重要的、也是你在使用Mina 时最主要关注的地方。


(4.)  IoHandler:这个接口负责编写业务逻辑,也就是接收、发送数据的地方。

 

2. Mina编程的大致过程.

    2.1 总体流程

        建立服务器端的资源: 包括 Acceptor的建立,之后为Acceptor配置相应的Filter(可以是Mina自带的Filter或者自定义的Filter),

之后再配置相应基于事件驱动的处理业务逻辑的IoHandler.

       建立客户端的资源: Mina采用了统一的编程模型,所以建立客户端的过程和建立服务器端的过程大致上是相似的,不过这里建立的是Connector.

       2.2.1 建立自定义的TextLineCodecFacotry

       为了了解Mina的代码功能以及运行机制,我们模拟实现了类似Mina自带TextLineCodecFactory。

  该CodecFactory功能是: 配合ProtocolCodecFilter 进行对底层数据(binary二进制数据流)和高层数据(特定类型的数据对象信息,例如String)之间的转换。

       这里实现了一个断行读取功能,即遇到'\n'的时候,就认为是一个String Line , 将这段数据流封装成String,之后再交给下一个Filter或者Handler处理。

  CodecFactory是一个工厂方法,底层通过一个Decoder和Encoder来提供对数据进行解、编码的操作,载体是IoBuffer。解码:将二进制数据转换成高层数据(对象)    编码:将高层数据(对象)转换成二进制数据流)  )

 

服务端例子

import java.io.IOException;
import java.net.InetSocketAddress;
 
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
 
public class MinaServer {
 
    /**
     * @param args
     */
 
    public static void main(String[] args) {
        //创建一个非阻塞的server端Socket ,用NIO
        SocketAcceptor acceptor = new NioSocketAcceptor();
 
        /*---------接收字符串---------*/
//      //创建一个接收数据过滤器
//      DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
//      //设定过滤器一行行(/r/n)的读取数据
//      chain.addLast("mychin", new ProtocolCodecFilter(new TextLineCodecFactory()   ));
        /*---------接收对象---------*/
        //创建接收数据的过滤器
        DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
        //设定这个过滤器将以对象为单位读取数据
        ProtocolCodecFilter filter= new ProtocolCodecFilter(new ObjectSerializationCodecFactory());
        chain.addLast("objectFilter",filter);
 
        //设定服务器消息处理器
        acceptor.setHandler(new ClientMinaServerHanlder());
        //服务器绑定的端口
        int bindPort = 9988;
        //绑定端口,启动服务器
        try {
            acceptor.bind(new InetSocketAddress(bindPort));
        } catch (IOException e) {
            System.out.println("Mina Server start for error!"+bindPort);
            e.printStackTrace();
        }
        System.out.println("Mina Server run done! on port:"+bindPort);
    }
}

 

分享到:
评论

相关推荐

    apache-mina-2.0.4.rar_apache mina_mina

    - **mina-filter**模块:包含了各种预定义的过滤器,例如日志记录、压缩、SSL加密等。 - **mina-integration-spring**模块:如果你的项目使用Spring框架,这个模块可以帮助你更好地集成Mina。 通过分析源码,你可以...

    一个Apache MINA使用案例源代码ApacheMina

    Apache MINA是一个高性能、异步事件驱动的网络应用程序框架,主要设计用于简化开发服务器端的高性能网络应用。这个框架提供了一种抽象层,允许开发者使用相同的API处理多种不同的传输协议,如TCP/IP、UDP/IP以及SSL/...

    apache mina 学习笔记三(子项目FtpServer)

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,用于构建高性能、高可用性的网络应用程序。MINA 提供了一种简单而强大的API,开发者可以使用它来处理TCP/IP和UDP/IP协议,如...

    Apache mina2学习笔记DEMO

    在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...

    apache-mina例子

    这个例子是关于如何使用Apache Mina实现一个简单的服务端和客户端通信的示例。在这个案例中,`MinaTimeServer`是服务端程序,它负责监听客户端的连接请求,并发送时间信息;而`MinaClient`则是客户端程序,它连接到...

    Apache mina源代码框架解析

    在这里,我们添加了两个过滤器:`LoggingFilter`用于记录网络通信的日志,以及`ProtocolCodecFilter`,它使用`TextLineCodecFactory`来编码和解码文本消息。`TextLineCodecFactory`依赖于指定的字符集(这里是UTF-8...

    apache mina 简单示例

    Apache Mina是一个开源框架,主要用于构建高性能、高可用性的网络应用程序。它提供了异步事件驱动的网络应用编程接口(API),适用于TCP/IP和UDP/IP协议,如Socket和SSL/TLS。Mina的目标是简化网络编程,使开发者...

    apache-mina-2.1.3-bin.tar.zip

    8. **易于调试和监控**:MINA提供了详细的日志记录和统计功能,帮助开发者更好地理解和优化其网络应用。 9. **社区支持**:作为Apache软件基金会的项目,MINA拥有活跃的社区支持,不断更新和完善,开发者可以获取到...

    apache-mina-2.0.7-bin.tar

    标题中的"apache-mina-2.0.7-bin.tar"指的是Apache Mina 2.0.7版本的二进制发布包,该包包含了编译好的库文件和运行时所需的资源,用户可以直接使用而无需自行编译源代码。 描述中提及的"apache-mina-2.0.7-src.tar...

    apache-mina-2.0.4-src

    4. **跨平台**:由于是基于Java开发,Apache Mina可以在任何Java运行环境中使用,支持Windows、Linux、Mac OS等操作系统。 5. **高度可扩展**:Mina的设计使得添加新的协议或网络服务变得容易,只需添加新的过滤器...

    基于Apache Mina实现的TCP长连接和短连接实例

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在这个实例中,我们将深入探讨如何利用Apache Mina实现TCP的长连接和短连接。 首先,TCP(传输控制协议...

    apache-mina-2.0.7架包与源码

    4. **过滤器链**:MINA的过滤器机制允许开发者通过定义和串联一系列处理单元(过滤器)来构建复杂的网络应用逻辑,每个过滤器可以对数据进行读写、转换或者日志记录等操作。 5. **高性能**:MINA的设计目标是高性能...

    Apache_Mina.zip_apache_mina

    Apache Mina是一个高性能、异步事件驱动的网络通信框架,主要用在开发网络应用服务器,如FTP、SMTP、NNTP等协议服务器。本教程“深入理解Apache Mina”将帮助我们深入了解这一强大的Java库。 Apache Mina的核心理念...

    apache mina 中文参考手册

    综上所述,Apache Mina 是一个功能强大、易于使用的网络应用框架,它能够帮助开发者快速构建出高性能和高可靠性的网络应用程序。无论是对于初学者还是有经验的开发者来说,Mina 都是一个值得学习和使用的工具。

    apache mina socket

    在本文中,我们将深入探讨Apache Mina的核心概念、设计模式以及如何使用它来实现基于Socket的通信。 **Apache Mina的核心概念:** 1. **Event-Driven模型**:Mina采用了事件驱动模型,当网络事件(如数据接收、...

    Apache mina框架入门教程

    Apache Mina 框架是一个强大的网络通信应用框架,它主要针对基于TCP/IP和UDP/IP的协议栈,同时也支持Java对象序列化和其他通信方式。Mina 的核心设计目标是帮助开发者快速构建高性能、高可扩展性的网络应用。它采用...

    Apache MINA框架所用的jar包

    将这些jar包导入到项目中,你就可以开始使用Apache MINA来构建网络应用了。以下是一些关键概念和步骤: - **Filter Chain**:MINA使用过滤器链模型处理数据,每个过滤器负责一部分任务,如数据编码、解码、安全性...

Global site tag (gtag.js) - Google Analytics