netty实战笔记 第三章 Netty的组件和设计

从类库的视角以及框架的视角来探讨Netty、。

3.1 Netty 网络的抽象 Channel,EventLoop,ChannelFuture

  • Channel — Socket
  • EventLoop – 控制流,多线程处理,并发。
  • ChannelFuture – 异步通知

3.1.1 Channel接口

  • EmbeddedChannel
  • LocalServerChannel
  • NioDatagramChannel
  • NioSctpChannel
  • NioSocketChannel

3.1.2 EventLoop 用于处理连接的是生命周期中所发生的事件。

在这里插入图片描述

  • 一个EventLoopGroup包含一个或者多个EventLoop;
  • 一个EventLoop在它的生命周期内,只和一个Thread绑定
  • 所有由EventLoop处理的IO事件将在它专有的Thread上被处理。
  • 一个Channel在它的声明周期内只注册于一个EventLoop
  • 一个EventLoop可能被分配一个或者多个Channel

3.1.3 ChannelFuture接口

ChannelFuture接口的addListener()方法注册了一个ChannelFutureListener,便于在某个操作完成时的时候,得到通知。

3.2 ChannelHandler 和 ChannelPipeline

3.2.1 ChannelHandler接口

充当了所有入站和出站数据的应用程序逻辑的容器。
ChannelHandler可以专门用于几乎任何类型的动作。例如将数据从一种格式转换为另外一种格式,或者处理转换过程中抛出的异常。

ChannelInboundHandler接收入站事件和数据,用于业务逻辑处理。程序的业务逻辑通常驻留在一个或者多个。

3.2.2 ChannelPipeline接口

ChannelPipeline提供了ChannelHandler链的容器,并定义了用于在该链上的传播入站和出站事件流的API。当channel被创建的时候,他会被自动地分配到它专属的ChannelPipeline。
过程如下:

  • 一个ChannelInitializer的实现被注册到了ServerBootStrap中。
  • 当ChannelInitializer.initChannel()方法被盗用的时候,ChannelInitializer将在ChannelPiple中安装一组自定义的ChannelHandler
  • ChannelInitializer将它自己从ChannelPipeline中移除。

ChannelHandler是处理往来ChannelPiple事件的任务和代码的通用容器。
ChannelHandler的工作是让事件流经ChannelPipeline。是在应用程序的初始或者被引导阶段被安装的。执行的顺序由被添加的顺讯所决定。ChannelPipeline是这些ChannelHandler的编排顺序。

######## 出站和入站
从客户端的角度去看,如果事件的运动方向是客户端到服务器端,那么我们称这些事件是出站。反之就是入站的。
在这里插入图片描述

3.2.4 编码器和解码器

通过netty发送接收消息,就会发生数据转换,入站消息会被解码。字节转换为另外一种格式。出站的话,则相反。。

3.2.5 抽象类 SimpleChannelInboundHandler

最常见的情况是,应用程序会利用一个ChannelHandler来接收解码消息,并对该数据应用业务逻辑.要创建这样一个ChannelHandler,只需要扩展SimpleChannelInboundHandler,T是要处理的消息的java类型。在这个eChannelHandler中,需要重写基类的防范,并且获取一个到ChannelhandlerContext的引用。这个应用将作为输入参数传递给ChannelHandler的所有方法。

3.2 引导

Netty的引导类,为应用程序的网络层配置提供了容器,这涉及将一个进程绑定到某一个指定的端口,或者将一个进程连接到另一个运行在某个指定主机的指定端口上的进程。

服务器和客户端实际上表示不同的网络行为,是监听传入的连接还是建立到一个或者多个进程的连接。

两种类型的引导,用于客户端(BootStrap),另一种(ServerBootStrap)用于服务器。

类别bootstrapServerBootStrap
网络编程中的作用连接到远程主机和端口绑定到一个本地端口
EventLoopGroup的数目12

服务器端需要两组不同宁的Channel,第一组将包含一个ServerChannel,代表服务器吱声的已绑定到某个本地端口正在监听的套接字。第二组将包含所有已创建的用来处理传入客户端连接的Channel。如下图
在这里插入图片描述

最后

如果你觉得写的还不错,就关注下公众号呗,关注后,有点小礼物回赠给你。
你可以获得5000+电子书,java,springCloud,adroid,python等各种视频教程,IT类经典书籍,各种软件的安装及破解教程。
希望一块学习,一块进步!
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方_小_白

谢谢金主子,记得关注方家小白哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值