相对于服务端编程,客户端的处理策略更加多样。
转自: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完全剖析,完全自学手册 #### Apache Mina 概述 Apache Mina(Multipurpose Infrastructure Networked Applications)是一个强大的网络应用框架,主要用于帮助开发者构建高性能且易于扩展的网络应用程序...
为了更好地理解和使用Mina2.0框架,我们将通过一个简单的示例来了解如何搭建一个基于Mina的服务端和客户端程序。 ##### 第一步:下载所需的Jar包 1. **mina-core-2.0.0-M1.jar**:这是Mina的核心库,包含了实现高...
这份文档旨在帮助读者理解和掌握Mina2.0的核心概念和使用方法,以实现高效的网络通信应用。 ### 引言 Mina(Java Internet Application Mining Architecture)是一个基于NIO(Non-blocking I/O)的网络通信框架,...
Mina2.0是其一个重要的版本,提供了许多改进和新特性,使得开发者能够更轻松地处理网络通信任务,尤其是在Java NIO(Non-blocking Input/Output)环境下。 **1. Mina的异步事件驱动模型** Mina的核心设计理念是...
### Apache MINA 2.0 用户指南:基础知识 #### 基础概念介绍 Apache MINA 2.0 是一款高性能且易于使用的网络应用程序框架,它简化了开发人员在网络编程方面的负担,允许开发者专注于应用程序的核心功能,而不是底层...
使用Mina创建服务端程序,需要实现一个Acceptor,它是监听特定端口并处理客户端连接的组件。通过IoAcceptor接口,可以创建和管理连接,同时注册处理器(IoHandler)来处理进来的数据。 4. **使用 telnet 命令测试...
### Mina2.0学习笔记核心知识点概览 #### 一、Mina入门与环境搭建 **Mina简介** Mina是Apache旗下的一款强大的网络应用框架,专为高性能和高可扩展性网络应用设计,其核心是利用Java NIO技术提供事件驱动的异步API...
Apache Mina2.0为开发者提供了构建高效网络应用的工具,通过异步API和事件驱动模型简化了NIO的编程。了解并掌握Mina的基础知识,如IoService和IoFilter,对于构建健壮的网络服务至关重要。通过实践,开发者可以灵活...
Mina2.0框架通过这些接口和类的协同工作,实现了高效、灵活的网络通信。过滤器链允许自定义数据处理逻辑,`IoSession`提供了丰富的会话管理和状态维护功能,而`IoService`及其子接口则为服务器和客户端的连接管理...
Mina2.0是其一个重要的版本,提供了更多的特性和优化。 **一. Mina 入门** 1. **下载使用的 Jar 包** 在开始Mina项目之前,首先需要从Apache官方网站下载Mina的jar包,通常包括核心库和其他相关依赖。这些jar...
Mina2.0是其一个重要的版本,提供了更多的特性和优化。 **一. Mina 入门** 1. **下载使用的 Jar 包** 在开始Mina项目之前,首先需要从Apache官方网站下载Mina的jar包,通常包括核心库和其他相关依赖。这些jar...
Mina2.0版本在前一版本的基础上进行了优化和改进,提供了更强大的功能和更好的性能。 ### Mina入门 1. **下载使用的Jar包**:在开始使用Mina之前,你需要从Apache官方网站下载最新版本的Mina2.0库,它包含了所有...
### Mina 2.0 初学教程知识点详解 #### Mina 概念与特性 Mina 是 Apache 下的一个开源项目,全称 Multipurpose Infrastructure Networked Applications,它为开发者提供了高性能且可扩展的网络应用程序开发支持。...
### Mina2.0 学习笔记(重点) #### 一、Mina入门 ##### 第一步:下载使用的Jar包 1. **Mina核心库**:登录Mina官网下载`mina2.0.1.zip`,解压后得到`mina-core-2.0.0-M1.jar`。 2. **日志框架SLF4J**:访问SLF4J...
5. **客户端连接**:客户端使用IoConnector发起连接请求,并提供一个IoSession接口用于数据传输。 在MinaDemo中,我们可能会创建一个简单的Echo服务,它将接收到的数据原样返回。这有助于理解数据传输的基本过程。 ...
### Mina2.0阅读源码笔记知识点梳理 #### 一、Mina 概述与官方资源 **Mina** 是 Apache 基金会下的一个开源项目,它为开发者提供了一个高性能且易于使用的网络应用框架。Mina 的设计目标是帮助用户轻松地开发出高...
Mina框架是一个基于Java的网络通信应用框架,它为高性能、高可用性的网络应用程序提供了强大的支持。本教程将深入探讨Mina框架的入门与开发,帮助你快速掌握这个框架的关键概念和技术。 首先,理解Mina的核心概念至...