netty 分享

发布时间 2023-07-21 09:42:11作者: 啥啥都被占用

讲解步骤

Linux网络编程
什么是Socket
网络事件模型
连接事件优化—多路复用epoll
I/O
BIO/OIO:食堂排队打饭模式:排队在窗口,打好才走;
NIO:点单、等待被叫模式:等待被叫,好了自己去端;
AIO:包厢模式:点单后菜直接被端上桌。
NIO 核心组件
Selector选择器
Channel管道
buffer缓冲区
核心原理
reactor 模型
概念: Reactor 是一种开发模式,模式的核心流程: 注册感兴趣的事件 -> 扫描是否有感兴趣的事件发生 -> 事件发生后做出相应的处理
单线程模型
多线程模型
netty 要点
概要
工作原理
入门程序解读
Bootstrap、ServerBootstrap
Future、ChannelFuture
Channel
Selector
ChannelHandler 及其实现类
Pipeline 和 ChannelPipeline
ChannelHandlerContext
ChannelOption
EventLoopGroup 和其实现类 NioEventLoopGroup
Unpooled 类
源码解读
启动服务
构建链接
数据处理
Linux网络编程
什么是Socket
套接字(Socket)是计算机网络通信中的一种编程接口,它提供了在网络上进行数据传输的方法。套接字应用程序可以通过套接字接口与网络中的其他计算机建立连接,并在连接上发送和接收数据。

常见的套接字类型是流套接字(Stream Socket)和数据报套接字(Datagram Socket)

从操作系统的角度看,套接字是一个C语言结构体,用于保存协议、本地地址和远程地址等信息。如图6-5所示,操作系统内核会管理所有的套接字(Socket)结构,并向用户返回一个文件描述符。Linux系统将很多资源都抽象成了文件,包括真实文件(见图6-5中的5号描述符)、设备(见图6-5中的0到2号描述符)、套接字等,因此用户可以用同一套API(read、write、close等)操作它们从服务端的角度看,套接字可分为两种,一种是“监听套接字”,一种是“普通套接字”。服务端开启监听,操作系统会激活一个监听套接字,专门用于接收客户端的连接(图6-5中的3号Socket监听8001端口)。当服务端接收(accept)连接时,操作系统会创建一个与客户端对应的普通套接字。在图6-5中,客户端B连接8001端口,在服务端应答后,服务端将变成如图6-6所示的状态。客户端B连接8001端口,服务端接收后,操作系统将创建一个新的普通套接字(见图6-6中的5号Socket),代表客户端B。回到Sunnet系统,客户端B连接后,网络线程会为开启8001监听端口的服务,并发送一条SOCKET_ACCEPT类型(对应于SocketAcceptMsg对象)的消息,listenFd为3,clientFd为5

所谓“建立连接”,是指双端都准备好套接字的结构体;同理,所谓“断开连接”,是指双端都已销毁套接字的结构体。由于一端的套接字很难感知另一端的状态,因此TCP通过“三次握手”和“四次挥手”这两个很复杂的过程,来尽可能地保证双端都处于“准备好”或“已销毁”的状态

网络事件模型

连接事件优化—多路复用epoll

I/O
BIO/OIO:食堂排队打饭模式:排队在窗口,打好才走;
NIO:点单、等待被叫模式:等待被叫,好了自己去端;
AIO:包厢模式:点单后菜直接被端上桌。

NIO 核心组件
Selector选择器
Channel管道
buffer缓冲区
核心原理

reactor 模型

概念: Reactor 是一种开发模式,模式的核心流程: 注册感兴趣的事件 -> 扫描是否有感兴趣的事件发生 -> 事件发生后做出相应的处理
单线程模型

多线程模型

Websocket借用了HTTP的协议来完成一部分握手(应用层的握手,不是TCP的握手

netty 要点

概要

工作原理

入门程序解读

Bootstrap、ServerBootstrap

Future、ChannelFuture

Channel

Selector

ChannelHandler 及其实现类

Pipeline 和 ChannelPipeline

ChannelHandlerContext

ChannelOption

EventLoopGroup 和其实现类 NioEventLoopGroup

Unpooled 类

源码解读
启动服务
构建链接
数据处理