Netty4 ChannelHandler 概述

  • 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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

Docker步步实践

目录文档:

①Docker简介

②基本概念

③安装Docker

④使用镜像:

⑤操作容器:

⑥访问仓库:

⑦数据管理:

⑧使用网络:

⑨高级网络配置:

⑩安全:

⑪底层实现:

⑫其他项目:

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
⑫其他项目:*

[外链图片转存中…(img-f0fzCebD-1713340920853)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 25
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值