`
niedj
  • 浏览: 31102 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

转: Mina框架研究(1)

阅读更多

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。

这个框架的优点:

– 异步 
– 无阻塞 
– 事件驱动 
– 支持TCP, UDP, APR, 串口… 
– 通过 过滤器(Filters)实现扩展性 
– 同时提供协议框架

 

总体框架

之前的一个项目用到了MINA,最近想再系统的整理一下,主要参考MINA 2.0 User Guide

基于MINA框架的应用程序架构应该是这样的:

apparch_small

 

底层是基于JAVA的NIO 1.0实现的;

其核心部分架构是这样的:

mina_app_arch

 

内部可以分为3 个层次:

I/O Service - 执行实际的I / O,可以选择现成的Services如 (*Acceptor),也可以自己写。

I/O Filter Chain - 这是一个由多个过滤器组成的过滤器链,在这个环节将字节数据转换到特定的数据结构中(Filters/Transforms bytes into desired Data Structures and vice-versa) 
I/O Handler - 实际的业务逻辑部分

 

Server端应用

对socket通信来说,使用比较广泛的是基于Server端的应用,尤其是并发规模达到一定程度后,颇具挑战性。那么我们来看一下,基于MINA框架的Server端应用:

1、IOAcceptor 监听指定的端口,处理新的网络连接;一旦一个新的连接到达后,IOAcceptor 就产生一个session,后续所有从这个IP和端口发送过来的请求就将通过这个Session被处理。

2、Session创建后,后续所有的数据包都被人到过滤器链中,通过过滤器将原始的字节码转变成高层的对象,这个环节PacketEncoder/Decoder就十分有用。

3、最后数据包或对象被传送给Handler做业务逻辑处理;

无标题

Main.java:

public class Main {
    private static final int PORT = 9123;
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {

        IoAcceptor acceptor = new NioSocketAcceptor();
        acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
        acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));

        acceptor.setHandler(  new TimeServerHandler() );

        acceptor.getSessionConfig().setReadBufferSize( 2048 );
        acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
        acceptor.bind(new InetSocketAddress(PORT));

    }

}

1、创建IoAcceptor;

2、加入日志记录和解码的过滤器,其中日志过滤器用SL4J库记录信息,而编码过滤器则解码所有收到的信息。使用 new TextLineCodecFactory() 发送的信息迕行编码,返是MINA自带的,功能有限,只能处理文本戒者String类型。

3、设置ServerHandler,这里是一个自定义的Handler:TimeServerHandler;

4、设置Session的对应的I/O processor 读缓存区大小2048;通常这个参数不需要设置;

5、设置空闲时间,这里的BOTH_IDLEEADER_IDLE 和 WRITER_IDLE. 都为10秒;

6、绑定监听端口9123;

TimeServerHandler.java:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package minatest1;

/**
 *
 * @author THINKPAD
 */

import java.util.Date;

import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;

public class TimeServerHandler extends IoHandlerAdapter
{
    @Override
    public void exceptionCaught( IoSession session, Throwable cause ) throws Exception
    {
        cause.printStackTrace();
    }

    @Override
    public void messageReceived( IoSession session, Object message ) throws Exception
    {
        String str = message.toString();
        if( str.trim().equalsIgnoreCase("quit") ) {
            session.close();
            return;
        }

        Date date = new Date();
        session.write( date.toString() );
        System.out.println("Message written...");
    }

    @Override
    public void sessionIdle( IoSession session, IdleStatus status ) throws Exception
    {
        System.out.println( "IDLE " + session.getIdleCount( status ));
    }
}

  这里主要有一下几个主要的方法:

messageReceived(…),对接收到的消息(已经解码)迕行下一步处理,这里对收到的字符串进行判断,如果是”quit”则断开连接;否则输出当前时间的字符串格式;

exceptionCaught(…),自定义异常处理, 要不然异常会被“吃掉”;

sessionIdle,当Session处于IDLE状态的时候,输出空闲状态次数;

 

 

测试,输入:telnet 127.0.0.1 9123,随便输入一串字符串,显示当前的时间:

image

 

IO Service

待续

转自: http://www.cnblogs.com/xiekeli/

 

分享到:
评论

相关推荐

    Mina 框架研究与实现

    ### Mina框架研究与实现 #### 引言 在当今高度网络化的世界中,服务器端程序面临着前所未有的挑战,特别是当需要同时处理成百上千的客户端连接时。这不仅要求服务器具备高性能,还必须保证高可用性。Mina框架正是...

    JAVA mina 框架源码

    JAVA Mina框架是一款高度可扩展、高性能的网络应用开发框架,专为Java平台设计。它提供了丰富的网络通信API,使得开发者能够轻松地构建基于TCP/IP、UDP/IP以及其他协议的服务器和客户端应用程序。Mina框架的核心设计...

    apache-mina-2.0.4.rar_apache mina_mina

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...

    Mina入门:mina版之HelloWorld

    Apache Mina是一个开源项目,它提供了一个高度模块化、高性能的网络通信框架。Mina旨在简化网络应用的开发,支持多种传输协议,如TCP、UDP、HTTP、FTP等。在这个“Mina入门:Mina版之HelloWorld”教程中,我们将探讨...

    mina框架源码及jar包

    在本压缩包"apache-mina-2.0.4"中,包含的是Mina框架的源码和jar包,这为开发者深入理解Mina的工作机制以及自定义功能提供了便利。 **Mina框架的核心概念:** 1. **I/O模型**:Mina基于NIO(Non-blocking I/O)...

    微信小程序 Web MINA框架下载.rar

    1. **视图层(View Layer)**:MINA框架使用WXML(WeiXin Markup Language)和WXSS(WeiXin Style Sheet)作为其特有的标记语言和样式表语言,分别用于结构布局和样式设计。它们与HTML和CSS类似,但有一些特定于微信...

    mina框架中socket使用,有服务端和客户端。

    1. **MINA框架**:MINA(Multi-purpose Infrastructure for Network Applications)是一个高性能、易用的网络应用框架,它为开发者提供了低级别的网络操作抽象,如读写数据、事件处理等,让开发者可以专注于业务逻辑...

    mina框架的使用

    Apache MINA(Multipurpose ...通过研究这些源代码,读者可以更直观地了解MINA框架的使用方法和实现细节。学习这个项目,你可以动手实践MINA的基本用法,理解异步编程模型,以及如何处理网络通信中的各种事件。

    mina2框架+实例教程

    **Mina2框架详解与实例教程** Mina2(全称Apache MINA,Multipurpose Infrastructure for Network Applications)是一个高性能、事件驱动的网络应用程序框架,主要应用于开发网络通信应用,如TCP/IP和UDP/IP协议栈...

    apache下的mina框架的源码

    在深入分析MINA框架源码之前,我们需要理解几个核心概念: 1. **过滤器(Filter)**:MINA采用过滤器链模式处理网络事件,每个过滤器都可以对入站和出站的数据进行处理。过滤器可以用于数据编码、解码、安全处理、...

    mina框架中socket应用的简单小项目,包含了所需jar

    1. **Apache MINA框架**:MINA是一个非阻塞I/O框架,它允许开发者用相同的API处理TCP/IP和UDP/IP协议,以及其他的I/O协议。MINA提供了一套事件驱动的模型,简化了网络编程,提高了性能和可伸缩性。 2. **Socket编程...

    java源码:高性能Java网络框架 MINA.zip

    总而言之,`java源码:高性能Java网络框架 MINA.zip`这个压缩包包含的是MINA框架的源代码,对于希望深入研究Java网络编程、提高系统性能的开发者来说是一份宝贵的资源。通过分析和学习MINA的源码,我们可以了解如何...

    ftpserver mina框架,适合学习

    Apache Mina FTPServer是一个基于Apache Mina框架的轻量级FTP服务器实现,它为开发者提供了构建自定义FTP服务器的能力。这个框架非常适合初学者学习,因为它提供了清晰的结构和丰富的文档,帮助理解网络通信和FTP...

    mina高性能Java网络框架 v2.2.1.zip

    标题"mina高性能Java网络框架 v2.2.1.zip"表明这是Apache MINA框架的一个特定版本——v2.2.1的打包文件,通常包含源代码、文档和其他相关资源。这个版本可能包含了性能优化、bug修复以及新功能的引入,适合用于开发...

    MINA1.7包(源码)

    MINA(Multipurpose Infrastructure for Network Applications)是Apache软件基金会的一个开源项目,主要为构建高性能、跨平台的网络应用程序提供框架。MINA1.7版本是一个成熟的版本,它提供了丰富的网络通信API,...

    基于Java的实例源码-高性能Java网络框架 MINA.zip

    **标题与描述解析** ...总的来说,这个压缩包为Java开发者提供了一个深入理解并实践MINA框架的机会,通过研究源码和示例,可以提升对网络编程和异步事件驱动模型的理解,以及如何利用MINA构建高性能的网络应用。

    mina项目示例

    在压缩包文件"apache-mina"中,可能包含了MINA框架的源码、示例代码、配置文件以及其他相关资源,这些都是学习和研究MINA的好材料。开发者可以通过阅读这些代码,进一步了解MINA在实际应用中的具体实现方式。

    mina框架自定义解编码器

    《MINA框架自定义解编码器的深度解析与实践》 MINA(Java Multithreaded Network Application Framework)是一个开源的、跨平台的Java网络应用框架,它为开发者提供了高度可扩展性和高性能的网络通信能力。MINA的...

    mina高性能Java网络框架 v2.1.6.zip

    - 源代码:完整的MINA框架源码,可以帮助开发者深入理解其内部机制,进行二次开发或调试。 - 文档:可能包括API文档、用户指南和开发者手册,帮助用户快速上手和解决问题。 - 示例:MINA通常会提供示例项目,展示...

Global site tag (gtag.js) - Google Analytics