- ChannelHandler
Netty Channel事件的基础接口,只定义与 Handler 的管理接口相关,具体如下:
- void handlerAdded(ChannelHandlerContext ctx)
在调用 DefaultChannelPipeline 的 addLast(add*) 将事件监听器添加到事件处理链条时调用。
- void handlerRemoved(ChannelHandlerContext ctx)
在调用DefaultChannelPipeline 的 addLast(add*) 发生异常时被调用;当通道关闭后,通道取消注册后,同时会触发通道移除事件,具体调用入口:DefaultChannelPipeline 的内部类 HeadContext 的 channelUnregistered。
- ChannelInboundHandler
入端类型的事件处理器。
- void channelRegistered(ChannelHandlerContext ctx)
通道注册到 Selector 时触发。客户端在调用 connect 方法,通过 TCP 建立连接后,获取 SocketChannel 后将该通道注册在 Selector 时或服务端在调用bind 方法后创建 ServerSocketChannel,通过将通道注册到 Selector 时监听客户端连接上时被调用。
- void channelUnregistered(ChannelHandlerContext ctx)
通道取消注册到Selector时被调用,通常在通道关闭时触发,首先触发channelInactive 事件,然后再触发 channelUnregistered 事件。
- void channelActive(ChannelHandlerContext ctx)
通道处于激活的事件,在 Netty 中,处于激活状态表示底层 Socket 的isOpen() 方法与 isConnected() 方法返回 true。
- void channelInactive(ChannelHandlerContext ctx)
通道处于非激活(关闭),调用了 close 方法时,会触发该事件,然后触发channelUnregistered 事件。
- void channelRead(ChannelHandlerContext ctx, Object msg)
通道从对端读取数据,当事件轮询到读事件,调用底层 SocketChanne 的 read 方法后,将读取的字节通过事件链进行处理,NIO 的触发入口为AbstractNioByteChannel 的内部类 NioByteUnsafe 的 read 方法。
- void channelReadComplete(ChannelHandlerContext ctx)
处理完一次通道读事件后触发,在 Netty 中一次读事件处理中,会多次调用SocketChannel 的 read方法。触发入口为AbstractNioByteChannel 的内部类NioByteUnsafe 的 read 方法。
- void userEventTriggered(ChannelHandlerContext ctx, Object evt)
触发用户自定义的事件,目前只定义了ChannelInputShutdownEvent(如果允许半关闭(输入端关闭而服务端不关闭))事件。
- void channelWritabilityChanged(ChannelHandlerContext ctx)
Netty 写缓存区可写状态变更事件(可写–》不可写、不可写–》可写),入口消息发送缓存区ChannelOutboundBuffer。
- void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)
异常事件。
- ChannelOutboundHandler
出端类型的事件处理器。
- void bind(ChannelHandlerContext ctx, SocketAddress add, ChannelPromise p)
调用ServerBootstrap 的 bind 方法的处理逻辑。绑定操作,服务端在启动时调用bind方法时触发(手动调用bind)。
- void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress,SocketAddress localAddress, ChannelPromise promise)
连接操作,客户端启动时调用connect方法时触发(手动调用connect)。
- void disconnect(ChannelHandlerContext ctx, ChannelPromise promise)
断开连接操作(手动调用disconnect)
- void close(ChannelHandlerContext ctx, ChannelPromise promise)
关闭通道,手动调用Channel#close方法时触发。(手动调用close)
- void deregister(ChannelHandlerContext ctx, ChannelPromise promise)
调用Channel#deregister时触发。(手动调用deregister)。
- void read(ChannelHandlerContext ctx) throws Exception
注册读事件,并不是触发网络读写事件。
- void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception
调用调用 Channel 的 write(底层 SocketChannel 的 write)时触发。
- void flush(ChannelHandlerContext ctx)
调用调用Channel#flush(SocketChannel#flush)时触发。
- ChannelDuplexHandler
双向 Handler,包含 Inbound 和 outbound 事件。
- ByteToMessageDecoder
解码器:字节流解码成一条一条的消息(Message、协议对象)。
- MessageToByteEncoder
编码器:消息(协议对象)编码成二进制字节流。
- AbstractTrafficShapingHandler
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
友可以戳我获取!!**](https://bbs.csdn.net/topics/618164986)
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!