[Netty] 之 入门
作者:互联网
文章目录
一、基本使用
服务端:
- 监听端口
- 接收请求,处理请求
- 返回响应
客户端:
- 建立连接
- 发送消息
- 接受消息
(1)服务端
源码参见文底
1. 主类
如图:
关注点,主要可分为三块:
Reactor
通信调度层- 职责链
Pipelien
- 业务逻辑逻辑处理
2. ChannelHandler
和业务逻辑
如图
channelRead()
: 对于每个传入的消息都要调用channelReadComplete()
:通知ChannelInboundHandler
最后一次对channelRead()
的调用exceptionCaught()
:在读取操作期间,有异常抛出时会调用
(2)客户端
1. 引导客户端
如图
2. ChannelHandler
实现客户端逻辑
如图:
channelActive()
:在到服务器的连接已经建立之后将被调用channelRead0()
: 当从服务器接收到一条消息时被调用exceptionCaught()
: 在处理过程中引发异常时被调用
二、主要概念
(1) Channel
基本的I/O操作(bind()、connect()、read()和write()依赖于底层网络传输所提供的原语
Netty的Channel
是对网络连接处理的抽象
负责与网络进行通讯,支持NIO
和OIO
两种方式
内部与网络Socket
连接,通过Channel
能够进行 I/O 操作。
(2)EventLoop
和 EventLoopGroup
EventLoop
是 事件循环。
EventLoopGroup
是运行在线程池中的事件循环组。
Netty 使用了 Reactor 模型,服务器的连接和读写放在线程池上的事件循环中执行
如图:
步骤:
- 事件循环内部会打开
selector
- 将
Channel
注册到事件循环中 - 事件循环不断的进行
select()
查找准备就绪的描述符
(3)ChannelHandler
与 ChannelPipeline
ChannelHandler
是通道处理器,用来处理 I/O 事件或拦截 I/O操作
ChannelPipeline
是一个双向流水线,内部维护了多个ChannelHandler
ChannelPipeline
内部维护了一个双向链表
(4)ServerBootstrap
ServerBootstrap
:绑定到一个本地端口, 有 2 个EventLoopGroup
Bootstrap
:连接到远程主机和端口,有 1 个EventLoopGroup
为什么ServerBootstrap
需要两个EventLoopGroup
?
- 第一组只包含一个
ServerChannel
, 代表服务器自身的已绑定到某个本地端口的正在监听的套接字。- 第二组包含所有已创建的用来处理传入客户端连接(对于每个服务器已经接受的连接都有一个)的 Channel
如图:
标签:Netty,调用,入门,ChannelHandler,如图,EventLoopGroup,Channel,客户端 来源: https://blog.csdn.net/fanfan4569/article/details/100807129