Netty使用初步24.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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”的。 下面以一个简单的例子说明如何编写“解码请求数据、业务逻辑处理、

文档评论(0)

pfenejiarz + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档