架构成长之路:Netty之ChannelHandler源码

一、概述

handler是控制socket io的各个生命周期的业务实现,netty实现了很多种协议所以有很多handler类,这儿主要关注Handler的设计、作用以及使用方法。

二、Channel

Channel与JDK中的Channel作用相当,是对I/O操作的封装,比如read()write()connect()close()bind()等,是Netty中核心对象。我们经常使用的NioServerSocketChannelNioSocketChannel就是其具体实现。Channel的状态改变都会触发相应事件传递到Pipeline中,被ChannelHandler处理,下面为Channel经常触发的事件:

事件

说明

ChannelRegistered

这里的注册强调的是Channel与EventLoop是否关联,满足下列条件才能称为registered:

1. 将相关socket注册到selector上 ;

2. Channel与EventLoop关联起来

ChannelActive

满足下列两个条件,就是active了:

1. channel 完成了注册;

2. channel 绑定到了本地端口(对NioServerSocketChannel而言)或连接到了远程主机(对NioSocketChannel而言)

三、ChannelHandler

ChannelHandler 是处理数据的核心对象,其对源端Channel触发的一系列事件进行处理。Netty提供了两个非常重要的子接口:

1、ChannelInboundHandler

ChannelInboundHandler方法如下图所示,从方法名可看出,其是对Channel触发事件的处理。


channelRegistered

在channel注册到线程池的时候会被触发。

channelUnregistered

在channel关闭的时候触发。

channelActive

registered完成之后且channel处理active状态,首次注册状态。主要见AbstractChannel的register0(promise)方法。

channelnactive

unregistered之前执行,主要见AbstractChannel的deregister方法。

channelRead

这个主要见pipeline的fireChannelRead方法,其被channel在获取到数据的阶段进行调用,进而触发到handler的channelRead方法。

channelReadComplete

这个和上面read方法一样,fireCh

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值