Netty学习之组件和设计

Netty学习之组件和设计

前言

前面我们简单地介绍了Netty,然后学习了一个简单的小例子,接下来我们来学习Netty的组件概要及组件之间的关系。

Channel,EventLoop,ChannelFuture

对于Netty来说,Channel、EventLoop、ChannelFuture三者的结合,就是Netty的网络抽象

  • Channel代表的是Socket
  • EventLoop代表的是控制流,多线程以及并发
  • ChannelFuture代表的是异步通知

Channel接口

Netty中的Channel接口,减少了直接与Socket交互的复杂性,Netty中提供了众多的预定义Channel

  • EmbeddedChannel
  • LocalServerChannel
  • NioDatagramChannel
  • NioSctpChannel
  • NioSocketChannel
  • NioServerSocketChannel

EventLoop接口

EventLoop定义了Netty处理事件的核心抽象。

Netty中的Channel、EventLoop、Thread以及EventLoopGroup的关系如下

  • 一个EventLoopGroup包含一个或者多个EventLoop
  • 一个EventLoop在其生命周期中绑定一个线程
  • 一个EventLoop处理的所有事件均由其对应的线程来处理(避免了同步需要加锁的问题)
  • 一个Channel在其生命周期中注册唯一一个EventLoop
  • 一个EventLoop可以同于处理一个或者多个Channel

具体的图例如下所示(图片来自《Netty In Action》)

Channel、EventLoop、EventLoopGroup的关系

ChannelFuture接口

在Netty中的所有操作都是异步的,因为所有的操作不太可能立即返回,所以我们需要有某个东西可以让我们在需要的时候来获取操作的结果,Netty中的ChannelFuture就是这个用途,通过其addListener()方法来注册ChannelFutureListener实例,可以在操作完成之后获得通知。

ChannelHandler,ChannelPipeline

如果说上面的三者是Netty的网络抽象,那么ChannelHanlder、ChannelPipeline就是Netty中的数据控制流以及应用的处理逻辑了。

ChannelHandler接口

从开发者的角度来讲,ChannelHandler是我们主要的操作对象,应用的操作逻辑都位于ChannelHandler中,ChannelHandler中的方法由网络事件进行触发和调用,ChannelHandler可以用于任何用途,比如讲数据从一个格式转换为另一种格式或者处理异常等。

有两个主要的子接口,ChannelInboundHandler、ChannelOutboundHandler,用于处理两种不同类型的数据(输入的数据以及输出的数据)

同时,在Netty中提供了很多Adapter,用于提高开发者的开发效率,并且这些适配器会自动将事件传递给下一个处理器

  • ChannelHandlerAdapter
  • ChannelInboundHandlerAdapter
  • ChannelOutboundHanlderAdapter
  • ChannelDuplexHandlerAdapter

编解码器

由于在网络中发送的数据都是二进制格式,所以,当使用Netty进行网络开发时,我们同样需要对数据进行编码和解码

编码用于将数据转换成二进制格式

解码用于将二进制格式转换成我们需要的格式

Netty中提供了一些常用的编解码器,这些编解码器本质上也是ChannelHandler,如ByteToMessageDecoder、MessageToByteEncoder

Channelpipeline接口

ChannelPipeline提供了将所有的ChannelHandler连接其他的容器,也就是说,在Netty中,所有的ChannelHandler通过ChannelPipeline串联起来。同时,ChannelPipeline提供了在该链中进行事件传播的方法。

ChannelPipeline通过下面的方式注册ChannelHandler

  • ServerBootstrap注册一个ChannelInitializer的实现类
  • 当ChannelInitializer.initChannel()被调用时,通过ChannelInitializer在ChannelPipeline注册一系列的ChannelHandler
  • ChannelInitializer将自己从ChannelPipeline中移除

ChannelHandler根据初始化阶段注册的顺序在ChannelPipeline中传递事件。

Netty中的事件可以通过每个方法中的ChannelHandlerContext来传递给下一个Handler,由于我们通常只关注某一个事件,所以Netty提供了ChannelInboundHandlerAdapter以及ChannelOutboundHandlerAdapter。

在Netty中有两种方式可以发送数据

  • 直接通过Channel发送,会从头到尾发送数据
  • 通过ChannelHandler绑定的ChannelHandlerContext进行发送,只会讲数据传递给下一个ChannelHandler

Bootstrapping

Netty中的Bootstap类提供了应用的网络层配置的容器

根据对象的不同,有两种不同类型的bootstrap

  • ServerBootstrap,用于绑定本地端口,需要两个EventLoopGroup(可以是同一个)
  • bootstrap,用于连接远程主机及端口,只需要一个EventLoopGroup

一个服务器需要两种不同类型的Channel,一个是用于存放一个单一的用于表示服务器自己监听的ServerChannel,一个用于维护所有已经建立连接的Channel,也就是accept()操作之后的连接

总结

本小节我们主要学习Netty的核心组件概要及组件的关系,包括了Channel、EventLoop、EventLoopGroup、ChanneHandler、ChannelPipeline、Boostrap等,不同的组件有不同的功能,不同的组件之间又相互交互,共同构成完整的Netty应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园建设方案旨在通过融合先进技术,如物联网、大数据、人工智能等,实现校园的智能化管理与服务。政策的推动和技术的成熟为智慧校园的发展提供了基础。该方案强调了数据的重要性,提出通过数据的整合、开放和共享,构建产学研资用联动的服务体系,以促进校园的精细化治理。 智慧校园的核心建设任务包括数据标准体系和应用标准体系的建设,以及信息化安全与等级保护的实施。方案提出了一站式服务大厅和移动校园的概念,通过整合校内外资源,实现资源共享平台和产教融合就业平台的建设。此外,校园大脑的构建是实现智慧校园的关键,它涉及到数据中心化、数据资产化和数据业务化,以数据驱动业务自动化和智能化。 技术应用方面,方案提出了物联网平台、5G网络、人工智能平台等新技术的融合应用,以打造多场景融合的智慧校园大脑。这包括智慧教室、智慧实验室、智慧图书馆、智慧党建等多领域的智能化应用,旨在提升教学、科研、管理和服务的效率和质量。 在实施层面,智慧校园建设需要统筹规划和分步实施,确保项目的可行性和有效性。方案提出了主题梳理、场景梳理和数据梳理的方法,以及现有技术支持和项目分级的考虑,以指导智慧校园的建设。 最后,智慧校园建设的成功依赖于开放、协同和融合的组织建设。通过战略咨询、分步实施、生态建设和短板补充,可以构建符合学校特色的生态链,实现智慧校园的长远发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值