# 一、Netty的工作原理
客服端
Bootstap
|-----------EventLoopGroup |-----连接成功
| |-------------NioSocketChannel-----------|--------------->|-----读数据
|---------------------------------------pipeline------------------------->服务器 |-----处理异常
服务器
ServiceBootStrap
|---------------------NioServiceSocketChannel
| |---------------------------localhost
| |---------------------------------------读,发,写 收信息
# 二、Netty核心组件
1. Channel
作用:传入(入站)或者(出站)数据的载体,因此,他可以被打开或者被关闭,连接或者断开连接。
ChannelInboundHandler
channelRead() 对于每一个传入的消息都要调用
channelReadComplete()读取到当前批量读取到最后一条信息
exceptionCaught()在读操作期间,有异常会抛出
ChannelInitializer
当一个新的连接被接收时,一个新的子Channel将会创建,而ChannelInitializer将会把一个你的实现 ChannelInboundHandler接口加入Channel的ChannelPiepeline中。
SimpleChannelInboundHandler
channelActive()在服务器的连接已经建立之后将被调用
channelRead0( ) 当从服务器接受到一条消息是被调用。
exceptionCaught()在处理过程中引发异常时被调用。
2.Channel的组件和设计
Channel、EventLoop、ChannelFuture
Channel:主要作用是I/O操作bind()、connect()、read()、write()
EventChannel:
一个EventLoopGroup包含一个多个EventLoop。
一个EventLoop在他的生命周期内只和一个Thread绑定。
所有由EventLoop处理的I/O事件都将在它专有的Thread上被处理。
一个Channel在它的生命周期内注册于一个EventLoop。
一个EventLoop可能被分配给一个或多个Channel 。
2.回调
Netty当一个新的连接已经被建立时,ChannelHandler的channelActive回调方法。
3.Future
监听回调方法
ChannelFuture
实现类:channelFutureListener
ChannelFuture接口
ChannelHandler接口 :数据从一种格式转换为另外一种数据格式,或者处理装换过程中所抛出的异常。
实现类 ChannelInboundHandler 发送客服端响应和冲刷数据。
5.事件和ChannelHandler
记录日志
数据装换
流控制
应用程序控制
ChannelPipeline接口
这个接口是做什么的?
他提供了ChannelHandler链的容器,并定义了用于在该链上的传播入站,和出站时间流的Api,当Channel被创 建 时,他会自动分配到ChannelPipeline
ChannelInitializer安装到ChannelPipeline中的过程如下所示
1. 一个ChannelInitializer的实现注册到了ServerBootStrap
2. 当ChannelInitializer.initChannel()方法被调用时,ChannelInitiazer将在ChannelPipeline中安装一组自定义的ChannelHandler
3. ChannelInitalizer将自己从ChannelPipeline中移除
在内部ChannelHandle接口有两个实现类
第一个:ChannelInboundHandler
第二个:ChannelOutboundHandler
如果你想特殊处理ChannelHandler事件需要处理
适配器出现Adapter
ChannelHandlerAdapter
ChannelInboundHandlerAdapter
ChannelOutboundHandlerAdapter
ChannelDuplexHandler
# 三 、netty的传输
1.传输Api
ChannelHandler的典型用途
1.将数据从一种格式转换成 另外一种格式
2.提供异常通知
3.提供Channel变为活动的或者非活动的通知
4.提供当Channel注册到EventLoop或则从EventLoop注销是通知
5.提供有关用户自定义事件的通知
在这里用到了一种设计模式那就是拦截器设计模式