Apache Mina开发手册之三

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/39617969 Apache Mina开发手册之三作者:chszs,转载需注明。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/39617969

Apache Mina开发手册之三

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

2、Mina服务器的架构

Mina服务器的架构图如下所示:


1)IOAcceptor即I/O接收器,负责监听网络连接和发过来的数据包。
2)对于任一新连接,会创建一个新会话,随后所有从该IP地址:端口发送过来的请求都会由该会话进行处理。
3)会话接收到的所有包,都会通过整个过滤器链的处理。过滤器可用于修改包的内容(比如转换对象,添加/删除信息等),把原始的字节转换成高级对象,反之亦然,以及包编解码器PacketEncoder和PacketDecoder等都是相当有用的。
4)最后包通过IOHandler句柄处理或转换,以满足业务的需求。

3、基于Mina的客户端架构

Mina客户端需要连接到服务器,发送消息并处理响应,它的架构图如下所示:


1)客户端首先创建IOConnector连接器(Mina为Socket连接构建的),启动时与服务器绑定。
2)一旦连接建立,会创建会话,并与连接相关联。
3)应用程序或客户端向会话写入数据,使得数据被发送到服务器,而后通过过滤器链。
4)从服务器收到的响应或消息也会遍历整个过滤器链,到达IOHandler句柄,进行处理。

六、创建Mina客户端

下面我们编写一个求和运算的客户端为例。

可见,要构建Mina客户端,我们需要完成以下步骤:
1)创建连接器
2)创建过滤器链
3)创建IOHandler句柄,并添加到连接器
4)绑定到服务器

下面详细说明。

1、创建连接器

NioSocketConnector connector = new NioSocketConnector();

2、创建过滤器链
if(USE_CUSTOM_CODEC){
	connector.getFilterChain().addLast("codec", 
		new ProtocolCodecFilter(new SumUpProtocolCodecFactory(false)));
} else{
	connector.getFilterChain().addLast("codec", 
		new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
}

3、创建IOHandler句柄
connector.setHandler(new ClientSessionHandler(values));

4、绑定到服务器
IoSession session;


for (;;) {
    try {
        ConnectFuture future = connector.connect(new InetSocketAddress(HOSTNAME, PORT));
        future.awaitUninterruptibly();
        session = future.getSession();
        break;
    } catch (RuntimeIoException e) {
        System.err.println("Failed to connect.");
        e.printStackTrace();
        Thread.sleep(5000);
    }
}

我们连接到服务器,由于连接是异步任务,故我们使用ConnectFuture类,它可以知道连接什么时候完成。一旦连接完成了,我们就可以获得相关的IoSession会话。

要发送消息到服务器,我们必须向会话写入消息数据。

目录
相关文章
|
4月前
|
消息中间件 数据采集 编解码
apache mina
apache mina
47 0
|
11月前
|
Java Apache Spring
Spring BeanUtils 2、Cglib BeanCopier 3、Apache BeanUtils 4、Apache PropertyUtils 5、Dozer 那么,我们到底应该选择哪种工具类更加合适呢?为什么Java开发手册中提到禁止使用Apache BeanUtils呢
Spring BeanUtils 2、Cglib BeanCopier 3、Apache BeanUtils 4、Apache PropertyUtils 5、Dozer 那么,我们到底应该选择哪种工具类更加合适呢?为什么Java开发手册中提到禁止使用Apache BeanUtils呢
105 0
|
网络协议 Java API
Apache Mina高性能通信框架研究邮件列表.
Apache Mina高性能通信框架研究邮件列表.
63 0
|
Apache 编解码 网络协议
|
Apache Java Spring
Apache Mina开发手册之四
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/40544275 Apache Mina开发手册之四 作者:chszs,转载需注明。
891 0
|
Java Apache 容器
Apache Mina开发手册之二
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/39550367 Apache Mina开发手册之二 作者:chszs,转载需注明。
900 0
|
API Apache
Apache Mina v2.0.8 API手册
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/39550809 Apache Mina v2.0.8 API手册 作者:chszs,转载需注明。
1036 0
|
Java Apache 编解码
Apache Mina开发手册
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/39525717 Apache Mina开发手册 作者:chszs,转载需注明。
1194 0

相关实验场景

更多

推荐镜像

更多
下一篇
无影云桌面