其他分享
首页 > 其他分享> > [Netty] 之 入门

[Netty] 之 入门

作者:互联网

文章目录


一、基本使用


服务端:

  1. 监听端口
  2. 接收请求,处理请求
  3. 返回响应

客户端:

  1. 建立连接
  2. 发送消息
  3. 接受消息

(1)服务端

源码参见文底


1. 主类

如图:
在这里插入图片描述

关注点,主要可分为三块:

  1. Reactor通信调度层
  2. 职责链Pipelien
  3. 业务逻辑逻辑处理

2. ChannelHandler和业务逻辑

如图

在这里插入图片描述

  1. channelRead(): 对于每个传入的消息都要调用
  2. channelReadComplete():通知ChannelInboundHandler最后一次对channelRead()的调用
  3. exceptionCaught():在读取操作期间,有异常抛出时会调用

(2)客户端


1. 引导客户端

如图
在这里插入图片描述


2. ChannelHandler 实现客户端逻辑

如图:
在这里插入图片描述

  1. channelActive():在到服务器的连接已经建立之后将被调用
  2. channelRead0(): 当从服务器接收到一条消息时被调用
  3. exceptionCaught(): 在处理过程中引发异常时被调用


二、主要概念


(1) Channel

基本的I/O操作(bind()、connect()、read()和write()依赖于底层网络传输所提供的原语

Netty的Channel是对网络连接处理的抽象

负责与网络进行通讯,支持NIOOIO两种方式

内部与网络Socket连接,通过Channel能够进行 I/O 操作。


(2)EventLoopEventLoopGroup

EventLoop 是 事件循环。
EventLoopGroup 是运行在线程池中的事件循环组。

Netty 使用了 Reactor 模型,服务器的连接和读写放在线程池上的事件循环中执行

如图:
在这里插入图片描述

步骤:

  1. 事件循环内部会打开selector
  2. Channel注册到事件循环中
  3. 事件循环不断的进行select()查找准备就绪的描述符

(3)ChannelHandlerChannelPipeline

ChannelHandler 是通道处理器,用来处理 I/O 事件或拦截 I/O操作

ChannelPipeline 是一个双向流水线,内部维护了多个ChannelHandler

ChannelPipeline 内部维护了一个双向链表


(4)ServerBootstrap

  1. ServerBootstrap:绑定到一个本地端口, 有 2 个EventLoopGroup
  2. Bootstrap:连接到远程主机和端口,有 1 个EventLoopGroup

为什么ServerBootstrap需要两个EventLoopGroup

  1. 第一组只包含一个ServerChannel, 代表服务器自身的已绑定到某个本地端口的正在监听的套接字。
  2. 第二组包含所有已创建的用来处理传入客户端连接(对于每个服务器已经接受的连接都有一个)的 Channel

如图:

在这里插入图片描述

标签:Netty,调用,入门,ChannelHandler,如图,EventLoopGroup,Channel,客户端
来源: https://blog.csdn.net/fanfan4569/article/details/100807129