网站大量收购独家精品文档,联系QQ:2885784924

Netty 代码分析.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Netty 代码分析

Netty 代码分析 Posted by bucketli on 2010-09-25 Leave a comment (1) Go to comments Netty 提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、 高可靠性的网络服务器和客户端程序[官方定义],整体来看其包含了以下内容: 1.提供了丰富的协议编解码支持,2.实现自有的 buffer 系统,减少复制所带来 的消耗,3.整套 channel 的实现,4.基于事件的过程流转以及完整的网络事件响 应与扩展,5.丰富的 example。本文并不对 Netty 实际使用中可能出现的问题做 分析,只是从代码角度分析它的架构以及实现上的一些关键细节。 首先来看下最如何使用 Netty(其自带 example 很好展示了使用),Netty 普通使 用一般是通过 BootStrap 来启动,BootStrap 主要分为两类:1.面向连接(TCP) 的 BootStrap(ClientBootStrap 和 ServerBootstrap),2.非面向连接(UDP) 的 (ConnectionlessBootstrap)。 Netty 整体架构很清晰的分成 2个部分,ChannelFactory 和 ChannelPipelineFactory,前者主要生产网络通信相关的 Channel 实例和 ChannelSink 实例,Netty 提供的 ChannelFactory 实现基本能够满足绝大部分 用户的需求,当然你也可以定制自己的 ChannelFactory,后者主要关注于具体传 输数据的处理,同时也包括其他方面的内容,比如异常处理等等,只要是你希望 的,你都可以往里添加相应的 handler,一般 ChannelPipelineFactory 由用户自 己实现,因为传输数据的处理及其他操作和业务关联比较紧密,需要自定义处理 的 handler。 现在,使用 Netty 的步骤实际上已经非常明确了,比如面向连接的 Netty 服务端 客户端使用,第一步:实例化一个 BootStrap,并且通过构造方法指定一个 ChannelFactory 实现,第二步:向 bootstrap 实例注册一个自己实现的 ChannelPipelineFactory,第三步:如果是服务器端,bootstrap.bind(new InetSocketAddress(port)),然后等待客户端来连接,如果是客户端, bootstrap.connect(new InetSocketAddress(host,port))取得一个 future,这 个时候 Netty 会去连接远程主机,在连接完成后,会发起类型为 CONNECTED 的 ChannelStateEvent,并且开始在你自定义的 Pipeline 里面流转,如果你注册的 handler 有这个事件的响应方法的话那么就会调用到这个方法。在此之后就是数 据的传输了。下面是一个简单客户端的代码解读。 // 实例化一个客户端 Bootstrap 实例,其中 NioClientSocketChannelFactory 实例由 Netty 提供 ClientBootstrap bootstrap = new ClientBootstrap( new NioClientSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool())); // 设置 PipelineFactory,由客户端自己实现 bootstrap.setPipelineFactory(new FactorialClientPipelineFactory(count)); //向目标地址发起一个连接 ChannelFuture connectFuture = bootstrap.connect(new InetSocketAddress(host, port)); // 等待链接成功,成功后发起的 connected 事件将会使 handler 开始 发送信息并且等待 messageRecive,当然这只是示例。 Channel channel = connectFuture.awaitUninterruptibly().getChannel(); // 得到用户自定义的 handler FactorialClientHandler handler = (FactorialClientHandler) channel.getPipeline().getLast(); // 从 handler 里面取数据并且打印,这里需要注意的是, handler.getF

文档评论(0)

l215322 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档