- 章节 6.1
- 内存泄漏检测参数配置
java -Dio.netty.leakDetectionLevel=ADVANCED 可以检测是否存在 ByteBuf 内存泄漏
-
泄漏检测级别
级别 描述 DISABLED 禁用泄漏检测。只有在详尽的测试之后才应设置为这个值 SIMPLE 使用 1%的默认采样率检测并报告任何发现的泄露。这是默认级别,适合绝大部分的情况 ADVANCED 使用默认的采样率,报告所发现的任何的泄露以及对应的消息被访问的位置 PARANOID 类似于 ADVANCED,但是其将会对每次(对消息的)访问都进行采样。这对性能将会有很大的影响,应该只在调试阶段使用
-
章节 6.2
-
pipeline 的执行过程
在 ChannelPipeline 传播事件时,它会测试 ChannelPipeline 中的下一个 ChannelHandler 的类型是否和事件的运动方向相匹配。如果不匹配, ChannelPipeline 将跳过该 ChannelHandler 并前进到下一个,直到它找到和该事件所期望的方向相匹配的为止。
-
ChannelHandler 的用于修改 ChannelPipeline 的方法
名称 描述 AddFirst
addBefore
addAfter
addLast将一个 ChannelHandler 添加到 ChannelPipeline 中 remove 将一个 ChannelHandler 从 Channe****lPipeline 中移除 replace 将 ChannelPipeline 中的一个 ChannelHandler 替换为另一个 ChannelHandler -
总结
- ChannelPipeline 保存了与 Channel 相关联的 ChannelHandler
- ChannelPipeline 可以根据需要,通过添加或者删除 ChannelHandler 来动态地修改
- ChannelPipeline 有着丰富的 API 用以被调用,以响应入站和出站事件
- 章节6.3
- ChannelHandlerContext 代表了 ChannelHandler 和 ChannelPipeline 之间的关联,每当有 ChannelHandler 添加到 ChannelPipeline 中时,都会创建 ChannelHandlerContext。 ChannelHandlerContext 的主要功能是管理它所关联的 ChannelHandler 和在同一个 ChannelPipeline 中的其他 ChannelHandler 之间的交互
- 尽可能地重用 EventLoop,以减少线程创建所带来的开销
- 146页
引用计数对于编码器和解码器来说,其过程也是相当的简单:一旦消息被编码或者解码,它就会被 ReferenceCountUtil.release(message)调用自动释放。如果你需要保留引用以便稍后使用,那么你可以调用 ReferenceCountUtil.retain(message)方法。这将会增加该引用计数,从而防止该消息被释放。
- 如果使用 ByteToMessageDecoder 不会引入太多的复杂性,那么请使用它;否则,请使用 ReplayingDecoder
- 长连接的时候,在pipeline中的只要是连接没有断,处理长连接的数据的channel都是一个实例