资料下载网
首页 计算机 考试教辅
Apache_Mina_Server中文参考手册 pdf电子书免费下载,百度云
首页 > 计算机 > 计算机网络/服务器 > Apache_Mina_Server中文参考手册 pdf电子书免费下载,百度云

《Apache_Mina_Server中文参考手册》pdf电子书免费下载


下载方式一:

百度网盘下载地址:https://pan.baidu.com/s/1tiJcta1vrjkpmCay6d2ptQ
百度网盘密码:1111

下载方式二:

http://ziliaoshare.cn/Download/ad_123505_pd_Apache_Mina_ServerZWCKSC.zip

 


Apache_Mina_Server中文参考手册

作者:empty

出版社:empty

《Apache_Mina_Server中文参考手册》介绍

Apache Mina Server是一个网络通信应用框架, 也就是说, 它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然, 也可以提供JAVA对象的序列化服务、虚拟机管道通信服务等) ,Mina可以帮助我们快速开发高性能、高扩展性的网络通信应用, Mina提供了事件动、异步(Mina的异步I 0默认使用的是JAVA NIO作为底层支持) 操作的编程模型。Mina主要有1.x和2.x两个分支, 这里我们讲解最新版本2.0, 如果你使用的是Minal.x,那么可能会有一些功能并不适用。学习本文档, 需要你已掌握JAVA IO、JAVA NIO、JAVASocket、JAVA线程及并发库(java.util.concurrent.*) 的知识。Mina同时提供了网络通信的Server端、Client端的封装, 无论是哪端, Mina在整个网通通信结构中都处于如下的位置;可见Mina的API将真正的网络通信与我们的应用程序隔离开来, 你只需要关心你要发送、接收的数据以及你的业务逻辑即可。

按照上面的执行流程, 我们首先需要编写IoService, IoService木身既是服务端, 又是客户端, 我们这里编写服务端, 所以使用Io Acceptor实现, 由于Io Acceptor是与协议无关的,因为我们要编写TCPServer, 所以我们使用Io Acceptor的实现Nio Socket Acceptor, 实际上底层就是调用java.nio.channels.ServerSocket Channel类.当然, 如果你使用了Apache的APR库, 那么你可以选择使用Apr Socket Acceptor作为TCPServer的实现, 据传说Apache APR库的性能比JVM自带的本地库高出很多,

说它也拥有自己的Selector, 这是与我们使用JAVA NIO编码时的一个不同之处,通常在JAVA NIO编码中, 我们都是使用个Selector, 也就是不区分IoService与lo Processor两个功能接口.另外, Io Processor负责调用注册在IoService上的过滤器, 并在过滤器链之后调用Io Handler。Io Filter:这个接口定义一组拦截器, 这些拦截器可以包括日志输出、黑名单过滤、数据的编码(write方向) 与解码《read方向) 等功能, 其中数据的encode与decode是最为重要的、也是你在使用Mina时最上要关注的地方。Io Handler:这个接口负贵编写业务逻辑, 也就是接收、发送数据的地方.第一步:编写IoService

这段代码我们初始化了服务端的TCP/IP的基于NI 0的套接字, 然后调用Io Session Config设置读取数据的缓冲区大小、读写通道均在10秒内无任何操作就进入空闲状态。(2.)第二步:编写过滤器这里我们处理最简单的字符串传输, Mina已经为我们提供了Text Line Codec Factory编解码器工厂来对字符串进行编解码处理。

这段代码要在acceptor bind() 方法之前执行, 因为绑定套接字之后就不能再做这些准备工作了。这里先不用清楚编解码器是如何工作的,这个是后面重点说明的内容,这里你只需要清楚,我们传输的以换行符为标识的数据, 所以使用了Mina自带的换行符编解码器工厂,(3.)第三步:编写Io Handler这里我们只是简单的打印Client传说过来的数据。然后我们运行My Server中的main方法, 你可以看到控制台真处于阻寒状态, 此时, 我们用telnet 127.0.0.19123访问, 然后输入一些内容, 当按下回车键, 你会发现数据在Server端被输出, 但要注意不要输入中文, 因为Windows的命令行窗口不会对传输的数据这里注意你如果使用的操作系统, 或者使用的Telnet软件的换行符是什么, 如果不清楚,这里我们实现Mina中的TCP Client.因为前面说过无论是Server端还是Client端, 在Mina//这里我们使用的SL.F4J作为日志门面,至于为什么在后面说明,然后我们把这个Io Handler注册到IoService:当然这段代码也要在acceptor.bind() 方法之前执行,进行UTF-8编码。当输入quit结尾的字符串时, 连接被断开。可以别掉第二步中的两个红色的参数, 使用Text Line Codec内部的自动识别机制。

这里的第一行表示状态行,一般表示协议的名字、版本号等,第二行表示短信的发送号码,第二行表示短信接收的号码,第四行表示短信的字节数,最后的内容就是短信的内容,上面的每一行的末尾使用ASCII的10( n) 作为换行符, 因为这是纯文本数据, 协议要求双方使用UTF-8对字符串编解码。实际上如果你熟悉HTTP协议, 上面的这个精简的短信协议和HTTP协议的组成是非常像的,第一行是状态行,中间的是消息报头,最后面的是消息正文。在解析这个短信协议之前, 你需要知晓TCP的一个事项, 那就是数据的发送没有规模性,所谓的规模性就是作为数据的接收端,不知道到底什么时候数据算是读取完毕,所以应用层协议在制定的时候,必须指定数据读取的截至点。般来说,有如下三种方式设置数据读取的长度:(1.) 使用分隔符, 警如:Text Line编解码器。你可以使用 r、 n、NUL这些ASCII中的特殊的字符来告诉数据接收端,你只要遇见分隔符,就表示数据读完了,不用在那里傻等着不知道还有没有数据没读完啊?我可不可以开始把已经读取到的字节解码为指定的数据类型了啊?(2.)定长的字节数,这种方式是使用长度同定的数据发送,一般适用于指令发送,臀如:数据发送沉规定发送的数据都是双字节,AA表示启动、BB表示关闭等等。(3.)在数据中的某个位置使用一个长度域,表示数据的长度,这种处理方式最为灵活,上面的短信协议中的那个L就是短信文字的字节数, 其实HTTP协议的消息报头中的Content-Length也是表示消息正文的长度, 这样数据的接收端就知道我到底读到多长的字节数就表示不用再读取数据了。和比较解码(字节转为JAVA对象, 也叫做拆包) 来说, 编码(JAVA对象转为字节, 也叫做打包) 就很简单了, 你只需要把JAVA对象转为指定格式的字节流, write 0就可以了,下面我们开始对上面的短信协议进行编解码处理。

这里我们依据传入的字符集类型对message对象进行编码, 编码的方式就是按照短信协议拼装字符串到Io Buffer缓冲区, 然后调用Protocol Encoder Output的write O方法输出字节流。这里要注意生成短信内容长度时的红色代码, 我们使用String类与Byte[类型之间的转换方法获得转为字节流后的字节数。解码器的编写有以下几个步骤:A.将encode O方法中的message刈象强制转换为指定的对象类型:B.创建Io Buffer级冲区对象, 并设置为白动扩展:C.将转换后的message对象中的各个部分按照指定的应用层协议进行织装, 并put 0到Io Buffer缓冲区:

当你组装数据完毕之后, 调用flip O方法, 为输出做好准备, 切记在write O方法之前,要调用Io Buffer的flip O方法, 否则缓冲区的position的后面是没有数据可以用来输出的, 你必须调用flip 0方法将position移至0, limit移至刚才的position, 这个flip 0方法的含义请参看java.nio.ByteBuffer.E.最后调用Protocol Encoder Output的write O方法输出Io Buffer缓冲区实例。

第三步,解码器:在Mina中编写解码器, 可以实现Protocol Decoder接口, 其中有decode 0、finish Decode O、dispose() 三个方法。这里的finish Decode(方法可以用于处理在Io Session关闭时剩余的未读取数据,一般这个方法并不会被使用到,除非协议中未定义任何标识数据什么时候截止的约定, 婴如:Http响应的Content-Length未设定, 那么在你认为读取完数据后, 关闭TCP连接(Io Session的关闭) 后, 就可以调用这个方法处理剩余的数据, 当然你也可以忽略调剩余的数据。同样的,般情况下, 我们只需要继承适配器Protocol Decoder Adapter, 关注decode O方法即可。但前面说过解码器相对编码器米说,最麻烦的是数据发送过来的规模,以聊天室为例,一个TCP连接建立之后, 那么隔一段时间就会有聊天内容发送过来, 也就是decode O方法会被往复调用, 这样处理起来就会非常麻烦。那么Mina中幸好提供了Cumulative Protocol Decoder类,从名字上可以看出累积性的协议解码器,也就是说只要有数据发送过来,这个类就会去读取数据, 然后累积到内部的Io Buffer缓冲区, 但是具体的拆包(把程到缓冲区的数据解码为JAVA对象) 交由子类的do Decode 0方法完成, 实际H Cumulative Protocol Decoder就是在decode O反复的调用暴漏给子类实现的do Decode O方法


《Apache_Mina_Server中文参考手册》目录

empty

计算机


python
AI人工智能
javascript
计算机网络/服务器
数据库技术
计算机F

考试教辅


考研考博
英语四六级

沪ICP备18046276号-5
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:15618918379