付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Netty3.2 快速有效的网络应用开3.2.4.Final 译者LarryZhang 二次整理1. 问题提2. 解决方1. 开1.1Netty3.2 快速有效的网络应用开3.2.4.Final 译者LarryZhang 二次整理1. 问题提2. 解决方1. 开1.1. 写在开始之. 1.3. Received. . . 1.7处理基于流的传 1.7.1套接字缓存(SocketBuffer)的一个小警 1.7.2. 第一个解决办 1.7.3. 第二个解决办 1.8. POJO1.9. 关闭应用程 1.10. 2. 架构概2.1丰富的缓存数据结I/O2.3. 基 2.4. 2.4.1. 编码框2
2、.4.2SSLTLS 支2.4.3HTTP实ProtocolBuffer集2.5. 总前1问题提常常使用2.4. 2.4.1. 编码框2.4.2SSLTLS 支2.4.3HTTP实ProtocolBuffer集2.5. 总前1问题提常常使用HTTP客户从WEB服务器上获不适用通用的 的 多2解决方 高 Chapter1开1.1. 开始之. 1.3. Received. . . 1.7处理基于流的传 1.7.1套接字缓存(SocketBuffer)的一个小警 1.7.2. 1.7.3. 1.8. POJO1.9关闭你的应用程 1.10. 这一章围绕Neey Chapter 2,架构概览开始,然后
3、再回到这里1.1. 开始之此。 API页面上。此外,记Netty并告1.2. 编写一个 Discard服个 , , 个 当一个异常因为I/O 错误由Netty 抛出,或者由在处理事件过程中,handler 的实现抛出了异常 ,并且对应channel应已经实现了 DISCARD 服务的一半。接下来需要写 main 方法来运行这个配备到此为import .InetSocketAddress; importjava.util.concurrent.Executors;publicclassDiscardServerpublicicvoidmain(Stringargs)throwsException
4、 new( Executors.newCachedThre 使用 建 和 ServerBootstrapbootstrap=newServerBootstrap bootstrap.setPipelineFactory(new publicChannelPipelinegetPipeline() bootstrap.setOption(child.keepAlive, true); 的 的 刚 问题是 着 buf = (ChannelBuffer) e.getMessage(); uf.readable() ln(char)buf.readByte(); 多个 。多个 。 le.discard
5、 包1.4. 编写一个 Echo服这。这里返回的Channel 代表收到消息事MessageEvent 的那个连接 1.5. 编写一个 Time服 ch = e.getChannel(); messageReceived 方法,而是需要重channelConnected 方法。代码如下 eEvente) Channelch=(System.currentTimeMillis() / 1000);ChannelFuturef= public 释过, 释过, 用 尚未发生的后续I/O操作ChannelFuture 为 importChannelBuffer dynamicBuf= 也返回 的 完成
6、后关Channel 1.6. Time客户需要一TIME 的 import .InetSocketAddress; importjava.util.concurrent.Executors;publicclassTimeC ntChannelch= NioServerSocketChannelFactoryC ntBootstrap 在客户端,对应服务器端的ServerBootstrap publicicvoidmain(Stringargs)throwsString host=port new( Executors.newCachedThrentBootstrapbootstrap=newn
7、tBootstrap bootstrap.setPipelineFactory(new publicChannelPipelinegetPipeline()returnChannels.pipeline(newTimeC bootstrap.setOption(keepAlive, true);(new InetSocketAddress(host, 应该connect方法而不是bind 方法应该connect方法而不是bind 方法 收 看上去真的很简单,并且和服务器端代码没什么区别。不过,这个 IndexOutOfBoundsExceptionimport publicclassTimeC
8、 long currentTimeMillis = buf.read() * 1000L;ln(newDate(currentTimeMillis); e.getCause().pr1.7. 处理基于流的传1.7.1. 1.7. 处理基于流的传1.7.1. 1.7.2. 现在TIME例子个 |ABC|DEF|GHI|AB |CDEFG|H|I|ABC|DEF|GHITimeC importimport publicclassTimeC privatefinalChannelBufferbuf= ifytes()=4)long currentTimeMillis = buf.read() * 1
9、000L; ln(newDate(currentTimeMillis); 这个动态的缓存是能够根据需要增加容量ChannelBuffer 。这这个动态的缓存是能够根据需要增加容量ChannelBuffer 。这首先,所有收到的数据都必须汇聚到buf中 1.7.3. 你可能也注意到,你可以增加多个 ChannelHandler 给 ChannelPipeline,由此,你可以拆分单ChannelHandler 为多个模块化的 handler 来减少你的应用程序的复杂度。 例如, 你可以拆分TimeC TimeDecoder 处理字节重最初那个简单的TimeC publicclassTimeDec
10、oderextendsprotectedObject FrameDecoder ChannelHandler 的一个实现,使得处理重组问题简单FrameDecoder调用decode方法,收到新的数据时FrameDecoder ChannelHandler 的一个实现,使得处理重组问题简单FrameDecoder调用decode方法,收到新的数据时如果返回的是null 以为这收到的数据还FrameDecoder 会在数据量足够的时候再次调用 了一个消息。FrameDecoder 会丢弃位于 直至返null已经有了另一个 handler 可以现在到 ChannelPipeline应该修TimeC
11、 nt ChannelPipelineFactory 实现 API手册以获bootstrap.setPipelineFactory(new publicChannelPipelinegetPipeline() newTimeC ifytes()returnreturn此外,Netty 提供了一些“开箱即用”此外,Netty 提供了一些“开箱即用” net针对的是基于行的文本协1.8. POJO 、可复用。在这个ITME客户端、服务器端的例子中只 protectedObjecte)returnprotectedObject if (buffer.readabytes()4) return nul
12、l;import publicprivatepublic this.value=returnpublicStringtoString()returnnewDate(value* 的方法后,TimeC 是不是看上去更简单、 更优雅了? 同样的技术可以用于服务器端这次先更新一 下现在唯一缺少的就是编了。 这个编应该是一个把 ChannelBuffer 转换为 UnixTime UnixTimetime=newUnixTime(System.currentTimeMillis()/ChannelFuturef=e.getChannel().write(time); UnixTimem=(UnixTi
13、me)e.getMessage(); System.out.pr ln(m); returnnew编一个写入的请求。请注意MessageEvent 参数编一个写入的请求。请注意MessageEvent 参数和messageReceived的是同一类型,但是却有不同的解读。一个ChannelEvent 可以是上行或下行件,这取决于事件的传递方向。比如,MessageEvent在messageReceived中是上行事件,但是区 新的 中的前一个 用 importimport publicvoidwriteRequested(ChannelHandlerContextctx,UnixTimetim
14、e=(UnixTime) 的 1.9. 关闭应用的 1.9. 关闭应用程 字 如果在 TimeC nt 应用这三步, 关闭唯一的客户端连接所有 ChannelFactory 持有的资 publicclassTimeC ntpublicicvoidmain(Stringargs)throwsException ChannelPipelin peline=write(ctx, e.getFuture(), buf); 。 ChannelFuture 的getCause() 待 的 需要一所有活动连接的数据结构,这可不是琐碎的小事儿一桩。还好,有一个办法,那就ChannelGroupChannelF
15、uturefuture=bootstrap.connect(.); ifs()future.getCause().pr ChannelGroup代表打开Channel的集合JavacollectionAPI的特殊扩展。如果一个ChannelGroup代表打开Channel的集合JavacollectionAPI的特殊扩展。如果一个Channel入了 ChannelGroup, 然后这个 Channel 被关闭了, 那么这个关闭的 Channel 会自动从它的ChannelGroup 中移除。你可以对一个组执行一个操作,却作用于所有属于同一个组的Channel。比如你可以在停止服务器的时候,关闭
16、一ChannelGroup内所有的ChannelTimeServerHandler ChannelGroup( TimeServer.allChannels)添加一个新的ChannelGroup 是线程安全的这下所有的启用Channel都自动publicclassTimeServer publicicvoidmain(Stringargs)throwsException Channelchannel=bootstrap.bind(.); ServerBootstrap的bind 方法返回了一个服 ServerBootstrap的bind 方法返回了一个服务器端的、绑定了指定本地地址的Chann
17、el。调返回的Channelclose()方法可以使得它和绑定的本地地址解除绑定 的 包括绑定的服务Channel 会解除绑定,所有的受理的连接会被异步地关闭得到所有连 1.10. 总 区 一直都在期待Chapter2架构概. I/O2.3. 基2.4. 为更快捷开发的高级组2.4.1. 编码框2.4.2SSLTLS 支2.4.3HTTP 实ProtocolBuffer集2.5. 总2.4.2SSLTLS 支2.4.3HTTP 实ProtocolBuffer集2.5. 总。2.1. 丰富的 Buffer数据结 如果必要,你可以定义你buffer 再也不需flip() 了 ByteBuffer速
18、度ty.buffer 包描述I/OJava 中传统的 I/O API为不同的传输类型提供了不同的类型和方法。例如, .Socket ty.buffer 包描述I/OJava 中传统的 I/O API为不同的传输类型提供了不同的类型和方法。例如, .Socket 候就确定你的而应用程序基于哪套API 的API提供了很多重要的传输方式 另一种 替换掉几行构造方法的代码。此外2.3基者链模式的事件模2.3基者链模式的事件模 针对 ChannelEventChannelPipeline中的ChannelHandler来处理。pipeline实现了一 ercepting Filter模式的高级形式,使得用户可以完全控制事件是如何被处理的、handler之间如 public class MyWriteHandler implements SimpleChannelHandler Objectmessage=/Dosomethingwit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乳甲外科出科试题及答案
- 轨道交通电力牵引技术
- 2026 年初中英语《并列句》专项练习与答案 (100 题)
- 2026年深圳中考英语三轮复习冲刺试卷(附答案可下载)
- 菊花淡淡题目及答案
- 2026年深圳中考数学整式的运算试卷(附答案可下载)
- 2026年深圳中考生物人体的生命活动调节试卷(附答案可下载)
- 2026年深圳中考历史中国古代民族关系与对外交往试卷(附答案可下载)
- 税务实操答案及题库
- 油库大练兵 题库及答案
- 治疗失眠症的认知行为疗法训练
- 太原师范学院简介
- 2026年湘西民族职业技术学院单招职业倾向性考试题库新版
- 生产安全事故调查分析规则
- 2021海康威视DS-AT1000S超容量系列网络存储设备用户手册
- 水利水电工程单元工程施工质量验收标准第8部分:安全监测工程
- 【政治】2025年高考真题政治-海南卷(解析版-1)
- DB50∕T 1571-2024 智能网联汽车自动驾驶功能测试规范
- 低蛋白血症患者的护理讲课件
- 建设工程招投标培训课件
- 健康骨骼课件
评论
0/150
提交评论