一、概述
文章链接(推荐在此文档中观看,文档中有大量的流程图。并在持续更新中)
代码仓库链接
本篇笔记是个人学习时记录的笔记,学习的视频课程链接:
课程链接:【黑马程序员Netty全套教程, netty深入浅出Java网络编程教程】
暂时无法在飞书文档外展示此内容
整个课程分为5大部分
- 第一部分是NIO编程、会详细讲解NIO的Selector、ByteBuffer和Channel三大组件。建议即使之前有
NIO基础的同学也不要错过这一部分的学习。里面能够回答你以前学习NIO时很多的疑问 - 第二部分进入Netty入门学习,会介绍EventLoop、Channel、Future、Pipeline、Handler、ByteBuf等重
要组件,同样能回答你以前琢磨不清的一些问题 - 第三部分是Netty进阶学习,会介绍粘包半包的解决方法、协议的设设计、序列化知识,使用聊天室案例将这些
知识点串起来,为了让大家专注Netty编程,并没有引入第三方的框架,如Spring、WebSocket等,免得分散注意力 - 第四部分是Netty常见参数的学习以及优化
第五部分是源码分析,这里的源码分析侧重与Netty的服务器启动、建立连接、读取数据、EventLoop处理
事件的流程,不牵扯更多组件的源码
学习目标
学完本课程,你能够
- 使用Netty开发基本网络应用程序
- 彻底理解阻塞、非阻塞的区别,并跟Netty、NIO的编码联系起来小
- 懂得多路复用在服务器开发时的优势,为什么在此基础上还要加多线程
- Netty中是如何实现异步的,异步处理的优势是什么
- Netty中是如何管理线程的,EventLoop如何运作
- Netty中是如何管理内存的,ByteBuf特点和分配时机
环境和软件版本
- 采用了maven
- netty4最新版本
- 其它如lombok、logback、gson都是最简单常见的
二、 NIO编程
NIO的Selector、ByteBuffer和Channel三大组件
non-blocking-io 非阻塞io
2.1 三大组件
2.1.1 channel & Buffer
channel有一点类似于stream,它就是读写数据的双向通道,可以从channel将数据读入buffer,也可以将
buffer的数据写入channel,而之前的stream要么是输入,要么是是输出,channel比stream更为底层
暂时无法在飞书文档外展示此内容
- 常见的Channel有:
- FileChannel
- Datagram Channel
- SocketChannel
- ServerSocketChannel
- buffer则用来缓冲读写数据,常见的buffer有:
- ByteBuffer
- MappedByteBuffer
- DirectByteBuffer
- HeapByteBuffer
- ShortBuffer
- IntBuffer
- LongBuffer
- FloatBuffer
- DoubleBuffer
标题2.1.2 Selector
selector单从字面意思不好理解,需要结合服务器的设计演化来理解它的用途
多线程版本设计
暂时无法在飞书文档外展示此内容
多线程版本缺点
- 内存占用高
- 线程上下文切换成本高
- 只适合链接数少的场景
线程池版本设计
暂时无法在飞书文档外展示此内容
线程池版缺点
- 阻塞模式下,线程只能处理一个socket连接。
- 仅适合短链接场景。
selector版本设计
selector的作用就是配合一个线程来管理多个channel,获取这些channel上发生的事件,这些channel工作在
非阻塞模式下,不会让线程吊死在一个channel上。适合连接数特别多,但流量低的场景(low traffic)
暂时无法在飞书文档外展示此内容
调用selector的select()会阻塞直到channel发生了读写就绪事件,这些事件发生,select方法就会返回这些事
件交给thread来处理
1663

被折叠的 条评论
为什么被折叠?



