`
lingyibin
  • 浏览: 196830 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Mina框架学习笔记(六)

阅读更多

在前面章节中介绍了 Apache MINA 的基本概念和具体用法,下面讨论一些高级话题。

Apache MINA 中的很多操作都是异步的,比如连接的建立、连接的关闭、还有数据的发送等。在编写网络应用的时候,需要考虑这一点。比如 IoConnector的 connect方法,其返回值是 org.apache.mina.core.future.ConnectFuture类的对象。通过此对象,可以查询连接操作的状态。清单 3 中已经使用了 ConnectFuture。另外一个常用的是发送数据时使用的 org.apache.mina.core.future.WriteFuture,如 清单 11 所示。


IoSession session = ...; // 获取 I/O 会话对象
WriteFuture future = session.write("Hello World"); // 发送数据
future.awaitUninterruptibly(); // 等待发送数据操作完成
if(future.isWritten()) 
{ 
    // 数据已经被成功发送
} 
else 
{ 
    // 数据发送失败
}

由于这样的需求很常见,I/O 处理器中提供了 messageSent方法,当数据发送成功的时候,该方法会被调用。

Apache MINA 可以集成 JMX 来对网络应用进行管理和监测。下面通过对前面给出的计算器服务进行简单修改,来说明如何集成 JMX。所需的修改如 清单 12 所示。


MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); 
IoAcceptor acceptor = new NioSocketAcceptor(); 
IoServiceMBean acceptorMBean = new IoServiceMBean(acceptor); 
ObjectName acceptorName = new ObjectName(acceptor.getClass() 
    .getPackage().getName() 
    + ":type=acceptor,name=" + acceptor.getClass().getSimpleName()); 
mBeanServer.registerMBean(acceptorMBean, acceptorName); 

如 清单 12 所示,首先获取平台提供的受控 bean 的服务器,接着创建受控 bean(MBean)来包装想要管理和监测的对象,这里使用的是 I/O 连接器对象。最后把创建出来的受控 bean 注册到服务器即可。

在启动计算器服务应用的时候,添加下面的启动参数:-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8084 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false,就启用了 JMX。接着通过 JVM 提供的“Java 监视和管理控制台”(运行 jconsole)就可以连接到此应用进行管理和监测了。监测的结果如 图 6 所示。



通过“Java 监视和管理控制台”管理和监测基于 Apache MINA 的应用 

Apache MINA 可以和流行的开源框架 Spring 进行集成,由 Spring 来管理 Apache MINA 中的对象。与 Spring 集成的方式也比较简单,只需要编写相应的 Spring 配置文件即可。清单 13 中给出了与 Spring 集成之后的计算器服务的配置文件。


  1.  <?xml version="1.0" encoding="UTF-8"?>   
  2. <beans>   
  3.     <bean id="calculatorHandler" class="calculator.CalculatorHandler" />   
  4.   
  5.     <bean id="loggingFilter" class="org.apache.mina.filter.logging.LoggingFilter" />   
  6.   
  7.     <bean id="calculatorCodecFilter" class="org.apache.mina.filter.   
  8.         codec.ProtocolCodecFilter">   
  9.         <constructor-arg>   
  10.             <bean class="org.apache.mina.filter.codec.textline.TextLineCodecFactory" />   
  11.         </constructor-arg>   
  12.     </bean>   
  13.   
  14.     <bean id="filterChainBuilder"  
  15.         class="org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder">   
  16.         <property name="filters">   
  17.             <map>   
  18.                 <entry key="loggingFilter" value-ref="loggingFilter" />   
  19.                 <entry key="codecFilter" value-ref="calculatorCodecFilter" />   
  20.                 </map>   
  21.         </property>   
  22.     </bean>   
  23.   
  24.     <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">   
  25.         <property name="customEditors">   
  26.             <map>   
  27.               <entry key="java.net.SocketAddress">   
  28.                 <bean class="org.apache.mina.integration.beans.InetSocketAddressEditor"/>   
  29.               </entry>   
  30.             </map>   
  31.         </property>   
  32.     </bean>   
  33.   
  34.     <bean id="ioAcceptor" class="org.apache.mina.transport.socket.nio.NioSocketAcceptor"  
  35.         init-method="bind" destroy-method="unbind">   
  36.         <property name="defaultLocalAddress" value=":10010" />   
  37.         <property name="handler" ref="calculatorHandler" />   
  38.         <property name="filterChainBuilder" ref="filterChainBuilder" />   
  39.     </bean>   
  40. </beans>  

清单 13 中创建 I/O 处理器和 I/O 过滤器的方式很直接。由于不能直接从 I/O 接受器获取过滤器链,这里创建了一个org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder类的 bean,用来构建过滤器链。由 Apache MINA 提供的网络地址编辑器org.apache.mina.integration.beans.InetSocketAddressEditor允许以“主机名 : 端口”的形式指定网络地址。在声明 I/O 接受器的时候,通过 init-method指明了当 I/O 接受器创建成功之后,调用其 bind方法来接受连接;通过 destroy-method声明了当其被销毁的时候,调用其 unbind来停止监听。




回页首

Apache MINA 是一个很好的网络应用框架,它通过事件驱动的 API 为开发网络应用提供了良好的架构基础,同时也提供了丰富的 I/O 服务和 I/O 过滤器的实现,使得开发网络应用变得简单。本文详细介绍了 Apache MINA 中的基本概念,包括 I/O 服务、I/O 会话、I/O 过滤器和 I/O 处理器等,同时介绍了如何利用状态机来实现逻辑复杂的 I/O 处理器。除此之外,还讨论了 Apache MINA 如何与 JMX 和 Spring 进行集成。本文提供了一个简单的计算器服务和复杂的俄罗斯方块联机游戏作为示例,可以帮助读者更好的掌握基于 Apache MINA 的网络应用开发。




回页首

描述 名字 大小 下载方法 计算器服务示例源代码1
CalculatorMina.zip 7 KB HTTP
关于下载方法的信息

注意:

  1. 源代码中包含了与 JMX 和 Spring 集成的代码,运行需要 Apache Maven。

学习

  • 查看 Apache MINA 的更多文档。 
  • 了解 JMX
  • 查看 Spring 框架的更多信息。
  • 在 developerWorks Java 技术专区 上可以找到数百篇其他的 Java 参考资料。
  • 转自:https://www.ibm.com/developerworks/cn/java/j-lo-mina2/#code1

    最新源码在:http://code.google.com/p/tetris-mina/

     

    分享到:
    评论
    1 楼 幸福人生 2012-08-29  
    不错,很好使,代码下来,导入即可用。

    相关推荐

      MIna2.0学习笔记

      Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,主要用在开发网络通信应用...通过深入理解IoService接口和IoHandler机制,以及掌握如何创建和管理连接,可以更好地利用Mina框架来满足各种网络应用的需求。

      Mina2.0学习笔记(修订版).

      Apache Mina是一个高性能、事件驱动的网络应用框架,主要用于简化开发服务器端的复杂性,尤其在处理TCP/IP、UDP和SSL/...通过不断实践和深入学习,开发者可以更好地掌握Mina框架,构建出高效、稳定和可维护的网络应用。

      mina2学习笔记

      ### Mina2学习笔记知识点概览 #### 一、Mina入门详解 ##### 第一步:下载使用的Jar包 - **mina-core-2.0.0-M1.jar**:这是Mina核心库,提供了NIO框架的基本功能。 - **slf4j-api-1.5.2.jar**:用于日志记录的高级...

      Mina2.0学习笔记(完整版).doc

      IoSession是Mina框架中的核心概念,代表了客户端与服务器之间的一个会话。它包含了诸如读写操作、会话状态、连接参数等一系列重要信息。开发者可以通过IoSession进行数据传输、设置会话属性、管理会话生命周期等操作...

      Mina2.0学习笔记(修订版)

      ### Mina2.0学习笔记核心知识点概览 #### 一、Mina入门与环境搭建 ...以上是对《Mina2.0学习笔记(修订版)》的核心知识点概括,希望能帮助读者快速了解Mina框架的关键技术和应用场景,为后续深入学习打下坚实基础。

      Apache mina2学习笔记DEMO

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

      Mina2.0学习笔记

      ### Mina2.0学习笔记知识点汇总 #### 一、Mina简介 - **Mina定义**:Mina是Apache组织推出的一个网络应用框架,它能够帮助开发者构建高性能且易于扩展的网络应用程序。通过提供一个抽象的、事件驱动的异步API,Mina...

      Apache_Mina2.0学习笔记

      最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长...

      Mina学习笔记

      Apache Mina是一个基于Java的网络通信框架,专为高性能、高可用性和可扩展性而设计。...在深入学习Mina的过程中,理解IoService及其子类的工作原理,以及如何结合IoHandler实现业务逻辑,对于掌握Mina框架至关重要。

      mina初步学习笔记

      ### Mina初步学习笔记知识点概览 #### 一、Mina简介及下载配置流程 **Mina**,全称**Multipurpose Infrastructure Networked Applications**,是Apache基金会开发的一个高性能网络应用框架,旨在帮助开发者构建高...

      mina学习笔记,记录所有API

      在MINA的学习笔记中,记录的所有API通常会包括以下几个核心部分: 1. **IoSession**: 这是MINA的核心接口,代表了客户端和服务器之间的连接。IoSession提供了读写数据、管理连接状态、获取会话属性等功能。例如,`...

      Mina2.0学习笔记(重点)

      ### Mina2.0 学习笔记(重点) #### 一、Mina入门 ##### 第一步:下载使用的Jar包 1. **Mina核心库**:登录Mina官网下载`mina2.0.1.zip`,解压后得到`mina-core-2.0.0-M1.jar`。 2. **日志框架SLF4J**:访问SLF4J...

      Apache_Mina2.0学习笔记(初版).doc

      Apache Mina是一个强大的开源网络应用框架,主要设计用于构建高性能、高可扩展性的网络应用程序。Mina通过提供一个抽象的、事件驱动的异步API,简化了基于Java NIO(Non-blocking Input/Output)的复杂编程,使得...

      Mina 学习笔记(入门)

      **Mina 学习笔记(入门)** Apache Mina 是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务器端应用。它提供了一种简单的方式来处理网络协议,如TCP/IP和UDP/IP,以及SSL/TLS加密的连接。在本学习...

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

      在本学习笔记中,我们将专注于MINA的子项目——FtpServer,它是实现FTP服务器功能的一个模块。 FTP(File Transfer Protocol)是一种广泛使用的互联网协议,用于在不同主机之间传输文件。Apache MINA FtpServer提供...

      mina学习笔记

      《mina学习笔记》 Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是TCP和UDP协议的应用。MINA 提供了一种与网络协议无关的API,...

    Global site tag (gtag.js) - Google Analytics