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

基于IoConnector的Mina2.0.x客户端实现

阅读更多
相对于服务端编程,客户端的处理策略更加多样。



转自:http://blog.csdn.net/liu251/archive/2008/07/28/2726635.aspx



先沿用服务端的编程风格
,开发一个同样采用 ``IoHandler`` 进行异步事件处理的客户端:
::

     1 package test.mina.time.client;
     2
     3 import java.net.InetSocketAddress;
     4
     5 import org.apache.commons.logging.Log;
     6 import org.apache.commons.logging.LogFactory;
     7 import org.apache.mina.common.IoConnector;
     8 import org.apache.mina.common.IoHandlerAdapter;
     9 import org.apache.mina.common.IoSession;
    10 import org.apache.mina.filter.codec.ProtocolCodecFilter;
    11 import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
    12 import org.apache.mina.filter.logging.LoggingFilter;
    13 import org.apache.mina.transport.socket.nio.NioSocketConnector;
    14
    15 public class IoHandlerStyleTimeClient {
    16
    17     static Log log = LogFactory.getLog( IoHandlerStyleTimeClient.class );
    18
    19     public static void main( final String[] args ) {
    20         final IoConnector connector = new NioSocketConnector();
    21
    22         connector.setHandler( new IoHandlerAdapter() {
    23
    24             @Override
    25             public void messageReceived( final IoSession session,
    26                     final Object message )
    27                 throws Exception {
    28                 log.info( message );
    29             }
    30
    31         } );
    32
    33         connector.getFilterChain().addLast( "codec",
    34                 new ProtocolCodecFilter( new TextLineCodecFactory() ) );
    35         connector.getFilterChain().addLast( "logging", new LoggingFilter() );
    36
    37         connector.connect( new InetSocketAddress( 8150 ) );
    38         connector.dispose();
    39     }
    40
    41 }

可以看到客户端的代码和服务端几乎如出一辙,大体上只不过是把 ``IoAcceptor`` 和
``NioSocketAcceptor`` 替换成了 ``IoConnector`` 和 ``NioSocketConnector`` 而已。
我们仍然逐行 来检视一下。

创建连接器
----------

::

    20         final IoConnector connector = new NioSocketConnector();

传统的 TCP 客户端编程中,首先需要建立一个用于连接到服务端监听端口的客户端套接字
。你也许已经猜到, 如同 ``IoAcceptor`` 一样, MINA 中的这个 ``IoConnector`` 也
不仅仅对 应单个客户端套接字,而是一个客户端套接字工厂。利用 IoConnector 对不同
的远端地址 发起连接,便可以得到多个对应于客户端与不同服务端监听地址所建立的 TCP
连接的 ``IoSession`` 对象。

下面这个客户端则要简洁很多:
::

     1 package test.mina.time.client;
     2
     3 import java.net.InetSocketAddress;
     4
     5 import org.apache.commons.logging.Log;
     6 import org.apache.commons.logging.LogFactory;
     7 import org.apache.mina.common.IoConnector;
     8 import org.apache.mina.common.IoHandlerAdapter;
     9 import org.apache.mina.filter.codec.ProtocolCodecFilter;
    10 import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
    11 import org.apache.mina.transport.socket.nio.NioSocketConnector;
    12
    13 public class ReadStyleTimeClient {
    14
    15     static Log log = LogFactory.getLog( ReadStyleTimeClient.class );
    16
    17     public static void main( final String[] args ) {
    18         final IoConnector connector = new NioSocketConnector();
    19
    20         connector.setHandler( new IoHandlerAdapter() );
    21         connector.getSessionConfig().setUseReadOperation( true );
    22
    23         connector.getFilterChain().addLast( "codec",
    24                 new ProtocolCodecFilter( new TextLineCodecFactory() ) );
    25
    26         log.info( connector.connect( new InetSocketAddress( 8150 ) )
    27                 .awaitUninterruptibly().getSession().read()
    28                 .awaitUninterruptibly().getMessage() );
    29
    30         connector.dispose();
    31     }
    32
    33 }

read 方法说明
-------------

::

    final ConnectFuture connectFuture = connector
            .connect( new InetSocketAddress( 8150 ) );
    connectFuture.awaitUninterruptibly();

    final IoSession session = connectFuture.getSession();
    final ReadFuture readFuture = session.read();
    readFuture.awaitUninterruptibly();
    final Object message = readFuture.getMessage();

    log.info( message );

以上代码是 26 至 28 行的等价展开。

分享到:
评论

相关推荐

    Mina2.0完全剖析,完全自学手册

    ### Mina2.0完全剖析,完全自学手册 #### Apache Mina 概述 Apache Mina(Multipurpose Infrastructure Networked Applications)是一个强大的网络应用框架,主要用于帮助开发者构建高性能且易于扩展的网络应用程序...

    Mina2.0框架源码剖析.doc

    为了更好地理解和使用Mina2.0框架,我们将通过一个简单的示例来了解如何搭建一个基于Mina的服务端和客户端程序。 ##### 第一步:下载所需的Jar包 1. **mina-core-2.0.0-M1.jar**:这是Mina的核心库,包含了实现高...

    Mina2.0完全剖析.doc

    这份文档旨在帮助读者理解和掌握Mina2.0的核心概念和使用方法,以实现高效的网络通信应用。 ### 引言 Mina(Java Internet Application Mining Architecture)是一个基于NIO(Non-blocking I/O)的网络通信框架,...

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

    Mina2.0是其一个重要的版本,提供了许多改进和新特性,使得开发者能够更轻松地处理网络通信任务,尤其是在Java NIO(Non-blocking Input/Output)环境下。 **1. Mina的异步事件驱动模型** Mina的核心设计理念是...

    Apache MINA 2.0 用户指南( 缺第一章节)

    ### Apache MINA 2.0 用户指南:基础知识 #### 基础概念介绍 Apache MINA 2.0 是一款高性能且易于使用的网络应用程序框架,它简化了开发人员在网络编程方面的负担,允许开发者专注于应用程序的核心功能,而不是底层...

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

    使用Mina创建服务端程序,需要实现一个Acceptor,它是监听特定端口并处理客户端连接的组件。通过IoAcceptor接口,可以创建和管理连接,同时注册处理器(IoHandler)来处理进来的数据。 4. **使用 telnet 命令测试...

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

    ### Mina2.0学习笔记核心知识点概览 #### 一、Mina入门与环境搭建 **Mina简介** Mina是Apache旗下的一款强大的网络应用框架,专为高性能和高可扩展性网络应用设计,其核心是利用Java NIO技术提供事件驱动的异步API...

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

    Apache Mina2.0为开发者提供了构建高效网络应用的工具,通过异步API和事件驱动模型简化了NIO的编程。了解并掌握Mina的基础知识,如IoService和IoFilter,对于构建健壮的网络服务至关重要。通过实践,开发者可以灵活...

    Mina2.0框架源码剖析

    Mina2.0框架通过这些接口和类的协同工作,实现了高效、灵活的网络通信。过滤器链允许自定义数据处理逻辑,`IoSession`提供了丰富的会话管理和状态维护功能,而`IoService`及其子接口则为服务器和客户端的连接管理...

    Mina2.0学习笔记

    Mina2.0是其一个重要的版本,提供了更多的特性和优化。 **一. Mina 入门** 1. **下载使用的 Jar 包** 在开始Mina项目之前,首先需要从Apache官方网站下载Mina的jar包,通常包括核心库和其他相关依赖。这些jar...

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

    Mina2.0是其一个重要的版本,提供了更多的特性和优化。 **一. Mina 入门** 1. **下载使用的 Jar 包** 在开始Mina项目之前,首先需要从Apache官方网站下载Mina的jar包,通常包括核心库和其他相关依赖。这些jar...

    Apache_Mina2.0学习笔记

    Mina2.0版本在前一版本的基础上进行了优化和改进,提供了更强大的功能和更好的性能。 ### Mina入门 1. **下载使用的Jar包**:在开始使用Mina之前,你需要从Apache官方网站下载最新版本的Mina2.0库,它包含了所有...

    mina2.0初学教程

    ### Mina 2.0 初学教程知识点详解 #### Mina 概念与特性 Mina 是 Apache 下的一个开源项目,全称 Multipurpose Infrastructure Networked Applications,它为开发者提供了高性能且可扩展的网络应用程序开发支持。...

    Mina2.0学习笔记(重点)

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

    Mina2.0入门

    5. **客户端连接**:客户端使用IoConnector发起连接请求,并提供一个IoSession接口用于数据传输。 在MinaDemo中,我们可能会创建一个简单的Echo服务,它将接收到的数据原样返回。这有助于理解数据传输的基本过程。 ...

    Mina2.0阅读源码笔记(很值得一看)

    ### Mina2.0阅读源码笔记知识点梳理 #### 一、Mina 概述与官方资源 **Mina** 是 Apache 基金会下的一个开源项目,它为开发者提供了一个高性能且易于使用的网络应用框架。Mina 的设计目标是帮助用户轻松地开发出高...

    mina框架的demo 入门,开发

    Mina框架是一个基于Java的网络通信应用框架,它为高性能、高可用性的网络应用程序提供了强大的支持。本教程将深入探讨Mina框架的入门与开发,帮助你快速掌握这个框架的关键概念和技术。 首先,理解Mina的核心概念至...

Global site tag (gtag.js) - Google Analytics