- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Netty使用初步24
1、简介
Java1.4提供了NIO 使开发者可以使用Java 编写高性能的服务端程序,但使用原生的NIO API
就像Linux C 中网络编程一样,还是需要做IO 处理、协议处理等低层次工作。所以,就像
C 服务端程序大量使用libevent 作为网络应用框架一样,Java 社区也不断涌现出基于NIO 的
网络应用框架。在这其中,Jboss 出品的Netty 就是个中翘楚。Netty 是个异步的事件驱动网
络应用框架,具有高性能、高扩展性等特性。Netty 提供了统一的底层协议接口,使得开发
者从底层的网络协议(比如TCP/IP 、UDP )中解脱出来。就使用来说,开发者只要参考Netty
提供的若干例子和它的指南文档,就可以放手开发基于Netty 的服务端程序了。
在Java 社区,最知名的开源Java NIO 框架要属Mina 和Netty ,而且两者渊源颇多,对两者
的比较自然不少。实际上,Netty 的作者原来就是Mina 作者之一,所以可以想到,Netty 和
Mina 在设计理念上会有很多共同点。我对Mina 没什么研究,但其作者介绍,Netty 的设计
对开发者有更友好的扩展性,并且性能方面要优于Mina ,而Netty 完善的文档也很吸引人。
所以,如果你在寻找Java NIO 框架,Netty 是个很不错的选择。本文的内容就是围绕一个demo
介绍使用Netty 的点点滴滴。
2、服务端程序
2.1、ChannelHandler
服务端程序通常的处理过程是:解码请求数据、业务逻辑处理、编码响应。从框架角度来说,
可以提供3个接口来控制并调度该处理过程;从更通用的角度来说,并不特化处理其中的每
一步,而把每一步当做过滤器链中的一环,这也是Netty 的做法。Netty 对请求处理过程实
现了过滤器链模式(ChannelPipeline ),每个过滤器实现了ChannelHandler 接口。Netty 中有
两种请求事件流类型也做了细分:
1)downstream event :其对应的 ChannelHandler 子接口是 ChannelDownstreamHandler 。
downstream event 是说从头到尾执行ChannelPipeline 中的ChannelDownstreamHandler,这一
过程相当于向外发送数据的过程。 downstream event 有:”write”、”bind”、”unbind”、
“connect”、 “disconnect”、”close”。
2 )upstream event :其对应的ChannelHandler 子接口是ChannelUpstreamHandler 。upstream event
处理的事件方向和 downstream event 相反,这一过程相当于接收处理外来请求的过程。
upstream event 有:”messageReceived”、“exceptionCaught”、”channelOpen”、”channelClosed”、
“channelBound” 、 ”channelUnbound” 、
“channelConnected”、”writeComplete”、”channelDisconnected”、”channelInterestChanged”。
Netty 中有个注释@interface ChannelPipelineCoverage,它表示被注释的ChannelHandler 是否
能添加到多个ChannelPipeline 中,其可选的值是”all”和”one”。”all”表示ChannelHandler 是
无状态的,可被多个 ChannelPipeline 共享,而”one”表示 ChannelHandler 只作用于单个
ChannelPipeline 中。但ChannelPipelineCoverage 只是个注释而已,并没有实际的检查作用。
对于ChannelHandler 是”all”还是”one”,还是根据逻辑需要而定。比如,像解码请求handler ,
因为可能解码的数据不完整,需要等待下一次读事件来了之后再继续解析,所以解码请求
handler 就需要是”one”的(否则多个Channel 共享数据就乱了)。而像业务逻辑处理hanlder
通常是”all”的。
下面以一个简单的例子说明如何编写“解码请求数据、业务逻辑处理、
您可能关注的文档
- Matlab2012B破解_安装_图文_详细30.doc
- matlab语音信号盲分离34.doc
- Matlab图像处理介绍29.doc
- Maven版本管理30.pdf
- MAX154BCNG+;MAX154ACWG+;MAX158ACAI+;MAX158AEAI+;MAX154BCAG+T;中文规格书,Datasheet资料12.pdf
- MAX1572ETC130+T,MAX1572ETC250+T,MAX1572ETC180+T,MAX1572ETC250+系列规格书,Datasheet 资料31.pdf
- MAX5982CETE+T;MAX5982AETE+T;MAX5982BETE+T;MAX5982AETE+;MAX5982CETE+;中文规格书,Datasheet资料31.pdf
- MAX9923FEUB+,MAX9923FEUB+T,MAX9922EUB+T,MAX9923TEUB+T,MAX9923HEUB+T, 规格书,Datasheet 资料12.pdf
- MAX895LESA+T;MAX895LESA+;MAX894LESA+T;MAX894LESA+;MAX894LESA;中文规格书,Datasheet资料12.pdf
- MaxScript授课大纲20.doc
文档评论(0)