Netty服务器端和客户端流程解析

一、服务端时序图:

在这里插入图片描述

1、创建ServerBootStrap实例

2、通过ServerBootStrap实例创建EventLoopGroup(线程池,事件循环组)

3、有客户端连接请求,就通过EventLoopGroup生成一个channel(通道,类似于socket),
   将其注册到EventLoop(线程)里面,这个线程会循环监听channel的IO事件。

4、创建管道ChannelPipeline和channel绑定,里面有多个阀门ChannelHandler (具体的处理逻辑就写在这里),
   当发生IO事件的时候,会按照顺序执行这些ChannelHandler里面的逻辑。

5、ChannelHandler里面的逻辑是另外由线程池产生的线程执行的,不会占用当前IO操作的线程资源。

二、Netty服务器端开发步骤

在这里插入图片描述

1、创建两个Reactor线程池,一个bossGroup(主线程池,管理连接事件),
    一个workerGroup(从主管读写IO操作)

2、创建启动配置对象bootstrap,并绑定两个线程池(bossGroup,workerGroup)。

3、开始链式设置bootstrap:

<1>、设置通道类型为NioserverSocket(非阻塞通道)
<2>、设置boosGroup里面的EventLoop里面的线程队列最大个数(option是设置主线程参数)
<3>、设置workerGroup里面的EventLoop启用心跳保活机制(childOption是设置从线程参数)
<4>、向channel(通道)对应的pipeline(管道)添加channelHandler(处理器)

当一个客户端连接上服务器之后,会产生一个channel对象并绑定到具体的
workerGroup中的一个eventLook上的selecter(监听器上),
当监听到读写IO操作准备就绪的时候,就会执行这个channel对应的pipeline
里面的一系列channelHandler处理器(链式调用)。

channelHandler分为两类,一种是入站处理器(服务器端读取到客户端的消息)
一种是出站处理器(服务器向客户端推送的消息)

按照添加顺序,入站(服务发出的消息)类型处理器顺序执行
 出站(服务接受的消息)按逆序执行

<5>、连接服务器,阻塞等待到连上完成(异步操作,通过事件触发)
<6>、关闭连接,阻塞(异步操作,通过事件触发)
<7>、优雅关闭线程池group,释放所有资源。

4、处理器的编写:

(1)、入站(读取数据,客户端请求服务端):

通过 ChannelInboundHandlerAdapter 实现,具体内容如下:
在这里插入图片描述

流程:

<1>、继承ChannelInboundHandlerAdapter ,实现以下抽象方法:

	channelRead:监听接收消息事件
	channelReadComplete:监听接收消息完成事件
	exceptionCaught:监听异常事件

<2>、可以通过channelHandlerContext处理器上下文
   	 获取到很多信息,比如连接的通道信息等等。

<3>、通过ByteBuf解码消息。

三、Netty客户端开发步骤:
在这里插入图片描述

流程:

1、创建Reactor线程池group
2、创建启动配置类bootstrap
3、开始配置bootstrap

<1>、指定EventLoopGroup来处理客户端IO事件
<2>、设置通道类型为NiosocketChannel
<3>、设置要连接的服务器端地址和端口
<4>、向channel对应ChannelPipeline(管道)中添加多个channelHandler(处理器):

	只要客户端和服务器建立了连接,就会创建一个channel,
	而这个channel会对应创建一个ChannelPipeline,
	我们可以通过channelInitializer(通道加载器)对象的initChannel方法
	来向管道里面加入一个channelHandler(处理器)。
	
	可以添加多个处理器,这种处理器分为不同的类型(出站和入站),
	按照添加顺序,入站(服务发出的消息)类型处理器顺序执行
	出站(服务接受的消息)按逆序执行

4、连接服务器,阻塞等待到连上完成(异步操作,通过事件触发)
5、关闭连接,阻塞(异步操作,通过事件触发)
6、优雅关闭线程池group,释放所有资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值