基于IoConnector的Mina2.0.x客户端实现
来源:互联网 发布:被欺骗的网络用语 编辑:程序博客网 时间:2024/04/29 10:22
相对于服务端编程,客户端的处理策略更加多样。
先沿用服务端的编程风格
,开发一个同样采用 ``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 行的等价展开。
- 基于IoConnector的Mina2.0.x客户端实现
- MINA2.0用户手册中文版--第三章 第四节 客户端接口IoConnector
- MINA2.0用户手册中文版--第三章 第四节 客户端接口IoConnector
- mina2.X基于TCP/IP协议的开发示例
- Mina2.0.x 服务器端
- 基于cocos2d-x的游戏客户端优化
- 基于cocos2d-x的游戏客户端优化
- 基于cocos2d-x的游戏客户端优化
- mina2.0的重连实现
- Mina2.x 线程模型
- MINA2 核心源代码分析笔记 - 2. IoAcceptor与IoConnector类族 (IoService)
- 人人网李成:基于Cocos2d-X的游戏客户端框架设计
- 实现基于OPhone 2.0的GTalk客户端
- 基于ftplib的交互式ftp客户端实现
- [转]使用 Apache MINA2 实现 Web 系统的消息中间件
- 【转载】使用 Apache MINA2 实现 Web 系统的消息中间件
- 使用 Apache MINA2 实现 Web 系统的消息中间件
- Apache Mina2实现类似QQ、飞秋的聊天功能
- 小趣事
- (引用)Java RPC通信机制之SOAP:应用Apache Axis进行Web Service开发
- 连接数据库oracle
- 关于fscanf(fd, "%*[^/n]");
- 连接说明性程序
- 基于IoConnector的Mina2.0.x客户端实现
- 简单的冒泡排序
- ArcGIS Server 入门学习
- 编译与链接
- 字符的变换
- 以后多进csdn来进行学习
- 使用AJAX技术的十大理由
- JDK1.6新特性
- Recordset对象