Netty实战读书笔记(第六章)
来源:互联网 发布:白俄罗斯交友软件 编辑:程序博客网 时间:2024/05/17 20:34
Netty channelHandler和channelPipeline。
ChannelHandlerContext提供了channel和pipeline之间的连接,加入一个channelhandler,就会有一个channelhandlercontext与之对应。
channelPipeline将channelHandler链接起来做逻辑处理。
channelHandler有四个状态,在handler处理时可更具状态激活不同的方法,比如channelActive对应于channelActive(ChannelHandlerContext ctx , Object msg)方法。
channelHandler生命周期:
channleHandler有两个子接口,分别用来出站数据处理和入站数据处理的。channelInBoundHandler、channelOutBoundHandler。
Netty资源管理。
发
public class DiscardOutBoundHandler extends ChannelOutboundHandlerAdapter{@Overridepublic void write(ChannelHandlerContext ctx , Object msg , ChannelPromise promise){ReferenceCountUtil.release(msg);// 释放消息,不传向下一个handler。promise.setSuccess();}}Netty通过计数法的方式,统计资源,如果一个消息被消费或者被丢弃了,应该调用ReferenceCountUtil.release()释放掉这个资源。
channelPipeline:
channelHandlerContext在channelPipeLine中流动,channelHandler对context进行处理。
import static io.netty.channel.DummyChannelPipeline.DUMMY_INSTANCE;import io.netty.channel.ChannelHandlerAdapter;import io.netty.channel.ChannelPipeline;public class ModifyChannelPipeline {private static final ChannelPipeline CHANNEL_PIPELINE_FROM_SOMEWHERE = DUMMY_INSTANCE;public void modifyPipeline(){ChannelPipeline channel = CHANNEL_PIPELINE_FROM_SOMEWHERE ;channel.addLast("handler1" , new FirstChannel());channel.addLast("handler2" , new SecondChannel());channel.addLast("handler3" , new ThreadChannel());channel.remove("handler3");}public static class FirstChannel extends ChannelHandlerAdapter{}public static class SecondChannel extends ChannelHandlerAdapter{}public static class ThreadChannel extends ChannelHandlerAdapter{}}ChannelHandlerContext:
ChannelHandlerContext提供了channel和pipeline之间的连接,加入一个channelhandler,就会有一个channelhandlercontext与之对应。
import io.netty.buffer.Unpooled;import io.netty.channel.Channel;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelPipeline;import io.netty.channel.DummyChannelPipeline;import io.netty.util.CharsetUtil;public class WriteHandlers { private static final ChannelHandlerContext CHANNEL_HANDLER_CONTEXT_FROM_SOMEWHERE = DUMMY_INSTANCE; private static final ChannelPipeline CHANNEL_PIPELINE_FROM_SOMEWHERE = DummyChannelPipeline.DUMMY_INSTANCE; /** * 通过ChannelHandlerContext访问channel */ public void accessChannel(){ ChannelHandlerContext handlerContext = this.CHANNEL_HANDLER_CONTEXT_FROM_SOMEWHERE; Channel channel = handlerContext.channel(); channel.write(Unpooled.copiedBuffer("okkk" , CharsetUtil.UTF_8)); } /** * 通过channelHandlercontext访问channelPipeline。 */ public void accessChannelPipeline(){ ChannelHandlerContext handlerContext = this.CHANNEL_HANDLER_CONTEXT_FROM_SOMEWHERE; ChannelPipeline channelPipe = handlerContext.pipeline(); channelPipe.write(Unpooled.copiedBuffer("ok" , CharsetUtil.UTF_8)); }}
阅读全文
0 0
- Netty实战读书笔记(第六章)
- Netty实战读书笔记(第二章)
- Netty实战读书笔记(第三章)
- Netty实战读书笔记(第四章)
- Netty实战读书笔记(第七章)
- Netty实战读书笔记(第七章)
- Netty实战读书笔记(第八章)
- Netty实战读书笔记(第十章)
- Netty In Action 读书笔记 - 第六章 ChannelHandler
- Netty实战读书笔记(第五章(一))
- Netty实战读书笔记(第五章(二))
- Netty实战读书笔记(第十一章(上))
- Netty实战读书笔记(第十一章(下))
- Netty实战读书笔记(第一章概念梳理)
- Netty实战读书笔记四:Bootstrapping
- 《Java并发编程实战》第六章 任务执行 读书笔记
- Netty实战读书笔记二:ChannelHandler和ChannelPipeline
- learning android 读书笔记 第六章 (1)
- Java的ClassLoader加载机制
- RxJava + Retrofit
- spring @Autowired @Quatifier @Resource的使用
- Ubuntu环境下挂载新硬盘
- C++ 利用栈实现走迷宫
- Netty实战读书笔记(第六章)
- C++中的随机数知识总结
- qt下载资源
- Spring整合Mybatis(一)------MapperScannerConfigurer
- 如何理解虚拟DOM
- 系统内置ContentProvider
- UDF函数
- ARKit从入门到精通(1)-ARKit初体验
- 【第三届蓝桥杯】古堡算式