Netty实战读书笔记-第三章Netty的组件和设计(一)

本文深入解析Netty框架的核心组件,包括EventLoop、Channel、ChannelFuture、ChannelHandler及Pipeline等,阐述其工作原理和使用场景,为读者提供全面的Netty内部机制理解。

EventLoop接口

  • 一个EventLoopGroup 包含一个或者多个EventLoop
  • 一个EventLoop在它的声明周期内只和一个Thread 绑定
  • 所有EventLoop处理的IO事件都是在它的专有Thread 上被处理
  • 一个Channel 在它的声明周期内只注册一个EventLoop
  • 一个Eventloop 可能会被分配给一个或者多个Channel

ChannelFuture

Netty 中所有的IO操作都是异步的,因为一个操作可能不会被立即返回。ChannelFuture 相当于一个占位符,在操作完成之后,用来进行某些操作。

ChannelHander 和ChannelPipeline

ChannelHander 承担了所有出站数据和入站数据的处理。派生出两个子接口,ChannelInboundHandler 和ChannelOutBoundHandler 专门用于处理入站数据和出站数据。我们通常需要实现这两个接口,来将我们自己的业务逻辑添加到ChannelHandler中。

ChannelPipeline 是ChannelHander的容器。就像一个单向链表,ChannelHandler 是它上面的一个个节点。它用来管理链上的ChannelHandler

Adapter

  • ChannelHandlerAdapter 适配器
  • ChannelInboudHandlerAdapter 入站适配器
  • ChannelOutboundHandlerAdapter 出站适配器
  • ChannelDuplexHandler 实现了入站适配器和出站适配器

编码器和解码器

在网络传输中,数据是以字节传输,在入站的时候被解码,出站编码,当我们不配置编码器和解码器的时候,netty使用默认编码器和解码器。netty的编码器和解码器都继承自ChannelHandlerAdapter,而ChannelHandlerAdapter又实现了HandlerAdapter,所以我们可以方便的像添加业务处理Handler 一样,在ChannelInitializer 中添加到Pipline 中。 需要注意的是,编码器需要添加到Handler 的末尾,解码器需要添加在Handler的开头,因为编码器和解码器本质上也是一个Handler ,处理数据之后,传递给下一个Handler的数据就是已经编码或者解码之后的数据格式了。

netty 提供了默认的常用编码器和解码器,以及预支的编解码器。

SimpleChannelInboundHandler

当我们需要创建一个消息入站处理器的时候,我们通常不需要直接去实现ChannelInboudHandler接口,我们可以通过继承SimpleChannelInboundHandler,然后重写少部分代码,来实现我们自己的业务逻辑。

引导类

BootStrap 和ServerBootStrap 分别引导启动客户端和服务端。
它们的区别如下。
1 BootStrap 是连接到远程主机和端口,ServerBootStrap 初始化并绑定到本地端口。
2 BootStrap 只需要一个EventLoopGroup, ServerBootStrap 需要两个EventLoopGroup(可以是同一个实例)
在这里插入图片描述

传输Channel

netty的channel是线程安全的,可以多个连接共用一个Channel, 并且channel 将会保证数据按顺序的被发送

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值