Mina入门经典

作者: 龙驰鹏
译者:
编辑: 杨海玲

图书目录:

详情

本书以Android studio、MySQL数据库、Eclipse和MyEclipse作为开发工具介绍Mina的知识点,全书共6章,内容由浅入深,从Mina执行流程开始介绍,着重介绍Mina中TCP/IP协议的知识点。书中还详细介绍了Mina在Android端和Web端应用,第3章到第5章的知识点,都可以在Mina中UDP协议下应用。
本专栏对知识点介绍力求“简明扼要”,用文字和图相结合来描述相关知识和技能,重点介绍Mina服务、过滤器和IoHandler的使用,同时也重点介绍自定义编码解码过滤器粘包和断包问题的解决。
本专栏适合Java工程师、高校计算机学生和教师、Java的学习者、物联网、游戏开发、个人即时通信、商务即时通信等行业的人阅读,也可以作为广大科技工作者、培训辅导教材的参考书。

作者简介

龙驰鹏是一位Mina实践者,曾用Mina做过很多小项目。

图书摘要

版权信息

书名:Mina入门经典

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    龙驰鹏

责任编辑 杨海玲

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


本专栏以Android studio、MySQL数据库、Eclipse和MyEclipse作为开发工具介绍Mina的知识点。本专栏一共分为6章,内容由浅入深,从Mina执行流程开始介绍,着重介绍Mina中TCP/IP协议的知识点,但是请读者注意,对于Mina中UDP协议的介绍,在第3~5章的知识点中,可以在Mina中UDP协议下应用。在读者阅读本专栏的时候,考虑到内容跨度较大,需要读者具备Android和Java Web的知识点,因此为了减轻读者的阅读压力,我提供了每一节示例的代码下载,同时在书中详细介绍了Mina在Android端和Web端的应用。对于跨越移动端和后端的知识点,我在专栏中会有详细的介绍。从第2章开始,每一节的知识点都有一个示例的应用。第6章是一个实战项目,分为Android端和Web后端。第6章的实战项目主要为了把前面章节介绍的知识点进行了系统地应用,加深读者对Mina知识点的了解与运用。

本专栏对知识点介绍力求“简明扼要”,用文字和图相结合来描述相关知识和技能,重点介绍Mina服务、过滤器和IoHandler的使用,同时也重点介绍自定义编码解码过滤器粘包和断包问题的解决。

本专栏适合Java工程师、高校计算机学生和教师、Java的学习者、物联网、游戏开发、个人即时通信、商务即时通信等行业的人阅读,也可以作为广大科技工作者、培训辅导教材的参考书。


在2016年9月的时候,我需要接手做一个培训系统项目。这个培训系统采用C/S架构,客户端使用Android系统,后端采用Web来管理。在这个培训系统中,移动端需要细分为管理员和考员。管理员使用账号登录的时候,需要了解考试实际在线人数、显示本次考试不在线人员名称和数量。管理员能够通过移动端应用程序生成多份考卷,对于考卷,管理员能手动选择考题数量和考题类型,也能交给系统自动生成多个考卷。生成多份考卷之后,管理员选择某个考卷推送到指定的考员手机上,也可以让系统自动分发。因此,对考员来说,接收到考卷有可能是一样的,也可能是部分一样的。在考员完成考卷提交之后,系统会把所有考员的分数传输到管理员手机上,考员只能查看自己的分数。这里需要用到即时通信技术,当时要求在局域网下进行考试,没有通过公网,因此需要自己搭建即时通信的后端。在搜索了即时通信框架技术之后,最终选择了Mina框架。做完这个项目之后,我打算通过购买一本图书系统地学习Mina的知识点,但是我发现市面上没有介绍Mina的图书。因此,我萌生了编写一本介绍Mina技术的图书。

本次主要讲解Mina中TCP/IP协议的知识点。如果读者是Java工程师、高校计算机学生和教师、Java的学习者、物联网、游戏开发、个人即时通信、商务即时通信等行业,都可以通过本专栏学习Mina。读者通过学习本专栏,可以系统地学习到Mina对于TCP/IP协议的知识点。

第1章介绍Mina的执行流程。

第2章介绍服务器端接收器和客户端连接器,读者通过第2章的学习了解到Mina服务器端接收器开启接收客户端连接和Mina客户端连接器开启连接服务器端的知识点。

第3章中主要介绍Mina过滤器,介绍的知识包括黑名单过滤器、心跳过滤器和编码解码过滤器,在第3章中对于心跳过滤器介绍,包括Mina提供的6种心跳模式,实现了心跳数据包的相互发送、服务器端检测客户端是否保持在线和客户端检测是否与服务器端保持连接,在介绍编码解码过滤器的时候,介绍了Mina提供的5种编码解码过滤器,对于黑名单过滤器加入了一个示例使用。

第4章介绍Mina执行流程最末端的IoHandler业务逻辑处理层。在第4章中加入了两个示例,实现服务器端主动推送消息到Android端和一个聊天工具的示例。

第5章重点介绍了读者使用多路分离编解码器工厂的时候,自定义编码解码实现中解决粘包和断包问题。

第6章是重点介绍多客户Android端实现即时通讯聊天实战项目。

在读者阅读本书的时候,如果需要查看源代码,可以通过异步社区(https://www.epubit.com)本专栏页面免费下载。

在编写完本书第1章之后,就开始联系异步社区,并确定在异步社区以专栏形式发布。在经过了近13个月的奋战之后,书稿终于完成。这13个月几乎每天都在熬夜编写。其间不断地与异步社区的杨海玲编辑联系,在这里感谢她的支持。在Android端的代码实现中,也感谢李志勤的帮助,第6章Android端大部分代码是由他完成的,我只参与了少部分代码实现。还要感谢李红天给予的帮助。


Mina框架是Apache开源的一款网络通信应用框架。使用Mina框架可以帮助用户开发高性能和高伸缩性的网络应用框架。Mina提供了一个抽象的事件驱动,开发者既可以通过Java NIO实现TCP/IP和UDP/IP等协议的数据传输,也可以在VM内管道通信。Mina对于传输不同类型数据,提供了一整套的API,极大地减少了开发者的开发时间。

在客户端与服务器端连接成功之后,可以抽象地认为客户端与服务器端建立了一个通信管道,IoSession就是负责在管道中传输数据和接收数据的管理者,同时Mina提供了过滤器,能够增强开发者对管道的管理。在IoHandler作为Mina执行流程的末端,需要开发者在IoHandler中实现业务逻辑的编码。

对于在互联网TCP协议传输数据包的时候,Mina提供了编码解码过滤器,帮助开发者解决粘包和断包问题处理,同时Mina也支持开发者自定义数据包的编码和解码操作。

在Mina运行架构中,开发者只需要关注应用程序开发即可。Mina会自动把开发者的应用程序和底层网络层之间黏合起来,开发者不需要考虑网络通信中底层的实现,也就是说,Mina起到的是黏合剂的作用。这里说的应用程序是指Mina建立的客户端应用程序或者Mina建立的一个后端应用程序,如图1-1所示。

图1-1

在图1-1中,Mina存在于中间层,开发者只需要关注于Mina顶部的设计,即应用程序设计。也就是说,开发者根据业务需求开发出对应的应用程序即可。至于Mina底层网络数据的传输,不需要开发者去关心。对于Mina黏合底层网络层,可以基于TCP协议、UDP协议或者VM通信。Mina负责接收底层网络数据之后,并且通过过滤器编码或者解码,把数据转化成开发者需要的数据包,返回到开发者的应用程序中。

Mina整体执行流程分为服务器端执行流程和客户端执行流程。无论是服务器端执行流程,还是客户端执行流程两者都具有很大的共性:需要在应用程序中新建IoService服务。IoService服务分为两种,一种是包括开启Mina服务器端接收器IoAcceptor,另一种是Mina客户端连接服务器端的IoConnector连接器。接着在IoFilterChain中创建过滤链。在创建过滤链的时候,开发者根据项目需求的选择Mina自带的过滤器,增强对应用程序的控制。最后在IoHandler中实现开发者业务逻辑处理。

对于Mina服务器端执行流程主要分为3步:首先IoAcceptor接收器监听端口号,或者监听IP地址和端口号,实现接收客户端新建连接或者接收客户端发送来服务器端的数据包,接着开始遍历在开启Mina接收器时,加入的过滤链中的过滤器,在加载完过滤器之后,数据就会传输到IoHandler中,在IoHandler中开发者需要根据需求实现业务逻辑代码。接收器执行流程如图1-2所示。

图1-2

当接收器IoAcceptor接收到有新客户端连接的时候,就会为这位客户端创建对应新的会话IoSession,服务器端通过操作这个会话IoSession实现对客户端发送数据、接收数据或者接收客户端的请求等操作。IoFilter过滤器可以用来解析数据包的内容或者增强对应用程序流程的控制等操作,例如,当开发者使用自定义编码和解码器的时候,需要判断此刻服务器端接收的数据包是否完整,是否出现粘包或者断包现象;当发现非法IP地址连接的时候,直接拒绝非法客户端的连接。在IoFilter中,开发者根据需要实现项目中自定义的编码解码。执行完IoFilter过滤链之后,后端通过IoSession发送数据包到客户端。

Mina客户端执行流程也是分为3个部分,客户端通过IoHandler从服务器端接收所有响应请求和消息之后,通过开发者在IoConnector连接服务器时,遍历加入过滤链的过滤器,接着通过IoConnector发送数据到服务器端。Mina客户端执行流程如图1-3所示。

图1-3

在客户端中负责连接后端的IoConnector连接器,客户端在新建连接的时候,指定服务器端的IP地址和端口号进行连接,在客户端连接成功之后,就会创建与服务器端关联的会话IoSession,客户端通过这个会话IoSession,向服务器端发送消息,在发送消息之前,连接器会遍历过滤链中开发者在客户端加入的编码模式,在对数据包进行编码完成之后,向后端发送数据包。

Mina执行流程无论是客户端,还是服务器端都需要经过过滤链,遍历开发者加入过滤链中的过滤器,过滤器在其中的作用至关重要,在加入过滤器的时候,可以加入日志过滤器、开发者自定义的编码解码过滤工厂等。在IoService中会把NIO烦琐的部分进行封装,提供简洁的接口给开发者使用。IoService分为Mina服务器端接收器IoAcceptor和Mina客户端连接器IoConnector。在Mina客户端连接器IoConnector连接成功之后,就生成一个与服务器端关联是IoSession,开发者根据获得的IoSession向后端发送数据包,同样的,对服务器而言,接收器成功接收客户端连接器连接之后,也会与成功连接的每一个客户端连接器生成一个关联的IoSession,服务器端通过操作IoSession,可以向每一个连接成功客户端发送数据包。总结来说Mina执行流程如下所示。

(1)IoService实例化被创建的时候,同时会在IoService中关联创建IoProcessor池和线程池。

(2)当IoAcceptor调用bind()方法或者IoConnector中connect()方法被调用的时候,IoService从线程池中取出一个线程,监听套接字端口后,创建套接字。

(3)服务器端接收器IoAcceptor监听到套接字上有连接请求的时候,就会从监听到客户端的IoAcceptor对象中取出IoProcessor实例,让取出来的IoProcessor实例执行这个会话通道上的过滤器。

(4)当客户端与服务器端关联的IoSession通道进入空闲状态或者关闭状态的时候,IoProcessor中IoSession可能就会被回收掉。


相关图书

推荐系统:产品与算法解析
推荐系统:产品与算法解析
程序员的制胜技
程序员的制胜技
面向电子鼻的复合光气体传感方法
面向电子鼻的复合光气体传感方法
程序设计竞赛专题挑战教程
程序设计竞赛专题挑战教程
Serverless核心技术和大规模实践
Serverless核心技术和大规模实践
深入浅出Windows API程序设计:编程基础篇
深入浅出Windows API程序设计:编程基础篇

相关文章

相关课程