开发者社区> chszs> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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会话。

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
重磅!Apache Flink 1.11 功能前瞻抢先看!
Flink 1.11 版本即将正式宣告发布!为满足大家的好奇与期待,我们邀请 Flink 核心开发者对 1.11 版本的功能特性进行解读与分享。Flink 1.11 在 1.10 的基础上对许多方面进行了完善和改进,并致力于进一步提高 Flink 的可用性及性能。
16632 0
Apache Flink 零基础入门(五):流处理核心组件 Time&Window 深度解析
为什么要有 Window; Window 中的三个核心组件:WindowAssigner、Trigger 和 Evictor;Window 中怎么处理乱序数据,乱序数据是否允许延迟,以及怎么处理迟到的数据;最后我们梳理了整个 Window 的数据流程,以及 Window 中怎么保证 Exactly
3733 0
Apache Flink 零基础入门(三):DataStream API 编程
本次课程将首先介绍 Flink 开发中比较核心的 DataStream API 。我们首先将回顾分布式流处理的一些基本概念,这些概念对于理解实际的 DataStream API 有非常大的作用。然后,我们将详细介绍 DataStream API 的设计,最后我们将通过一个例子来演示 DataStre
5967 0
Apache Flink 零基础入门(二):开发环境搭建和应用的配置、部署及运行
本文主要面向于初次接触 Flink、或者对 Flink 有了解但是没有实际操作过的同学。希望帮助大家更顺利地上手使用 Flink,并着手相关开发调试工作。
5741 0
Apache Flink 零基础入门(一):基础概念解析
本文是根据 Apache Flink 基础篇系列直播整理而成,由 Apache Flink PMC 戴资力与阿里巴巴高级产品专家陈守元共同分享。Apache Flink 系列入门教程每周更新一期,持续推送。
6635 0
Apache Flink 零基础入门(四):客户端操作的 5 种模式
本文主要分享 Flink 的 5 种任务提交的方式。熟练掌握各种任务提交方式,有利于提高我们日常的开发和运维效率。
5235 0
Apache Flink 1.9.0 为什么将支持 Python API ?
众所周知,Apache Flink(以下简称 Flink)的 Runtime 是用 Java 编写的,而即将发布的 Apache Flink 1.9.0 版本则会开启新的 ML 接口和新的 flink-python 模块,Flink 为什么要增加对 Python 的支持,想必大家一定好奇。
3445 0
即将发版!Apache Flink 1.9 版本有哪些新特性?
文整理自开源大数据专场中阿里巴巴高级技术专家杨克特(鲁尼)先生的精彩演讲,主要讲解了Apache Flink过去和现在的发展情况,同时分享了对Apache Flink未来发展方向的理解。
13926 0
一文读懂Apache Flink发展史
本文整理自开源大数据专场中阿里巴巴高级技术专家杨克特(鲁尼)先生的精彩演讲,主要讲解了Apache Flink过去和现在的发展情况,同时分享了对Apache Flink未来发展方向的理解。
3183 0
Apache Flink中的广播状态实用指南
自版本1.5.0以来,ApacheFlink提供了一种新的状态类型,称为广播状态(Broadcast State)。在本文中,我们会解释什么是广播状态,并通过一个例子,演示如何将其应用于一个用来评估基于事件流的动态模式的应用程序。
3583 0
+关注
841
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载