Netty学习(六)

本章主要介绍Netty究竟是怎么工作的

一、Netty的核心组件

先总体认识一下Netty用到的组件及它们在整个Netty架构中是怎么协调工作的,具体有

  • Bootstrap or ServerBootstrap
  • EventLoop
  • EventLoopGroup
  • ChannelPipeline
  • Channel
  • ChannelFuture
  • ChannelInitializer
  • ChannelHandler
  • ChannelHandlerContext

Bootstrap是netty应用程序的开始,它的主要作用是配置整个netty应用,串联各个组件。

ChannelHandler的主要作用是处理各种事件,可以是连接、数据连接、异常和数据收发等,子类有ChannelInboundHandler和ChannelOutboundHandler,用于数据的接收和写出处理,一般的核心逻辑也就实现在Bounder里。

ChannelInitializer是用来配置ChannelHandler的,并提供一个ChannelPipeline,把Handler添加到Pipeline内。

ChannelHandlerContext代表channelHandler和ChannelPipeline的绑定关系,每个channel会分配唯一一个ChannelPipeline,可以动态的添加和移除handler,每个handler和ChannelPipeling的绑定关系就是通过ChannelHandlerContext记录的。

EventLoops的目的是为Channel处理IO操作,一个EventLoop可以为多个Channel服务。

EventLoopGroup会包含多个EventLoop。

Channel代表了一个Socket链接,或者其它和IO操作相关的组件,它和EventLoop一起用来参与IO处理。

Future,在Netty的所有IO操作中都是异步的,IO操作完成会通过Future和ChannelFutures注册的监听器,有监听结果后自动触发。

二、Bootstrap、EventLoop、Channel的对应关系

一个channel会对应一个EventLoop,一个EventLoop会对应一个线程。当一个连接到达时,Netty会注册一个channel,然后EventLoopGroup会分配一个EventLoop绑定到这个channel,在这个channel的整个生命周期过程中,都会由绑定的这个EventLoop来为它服务,而这个EventLoop就是一个线程。

bootstrap分为两种类型,一种是用于client端,另一种是位于Server端。

  • ServerBootstrap用于Server端,通过调用bind()方法来绑定到一个端口监听连接;Bootstrap用于Client端,需要调用connect()方法来连接服务器端
  • 客户端的Bootstrap一般用一个EventLoopGroup,而服务器端的ServerBootstrap会用到两个(这两个也可以是同一个实例)

ChannelHandler有两个子类ChannelInboundHandler和ChannelOutboundHandler,这两个类对应了两个数据流向,如果数据是从外部流入应用程序,看做是inbound,相反便是outbound。InboundHandler和OutboundHandler在ChannelPipeline中是混合在一起的,那么它们如何区分彼此呢?其实很容易,因为它们各自实现的是不同的接口,对于inbound event,Netty会自动跳过OutboundHandler,相反若是outbound event,ChannelInboundHandler会被忽略掉。数据在各个Handler之间传递,这需要调用方法中传递的ChanneHandlerContext来操作。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值