netty学习笔记-01

一、概述

文章链接(推荐在此文档中观看,文档中有大量的流程图。并在持续更新中)
代码仓库链接

本篇笔记是个人学习时记录的笔记,学习的视频课程链接:
课程链接:【黑马程序员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有:
  1. FileChannel
  2. Datagram Channel
  3. SocketChannel
  4. ServerSocketChannel
  • buffer则用来缓冲读写数据,常见的buffer有:
  1. ByteBuffer
  2. MappedByteBuffer
  3. DirectByteBuffer
  4. HeapByteBuffer
  5. ShortBuffer
  6. IntBuffer
  7. LongBuffer
  8. FloatBuffer
  9. DoubleBuffer

标题2.1.2 Selector

selector单从字面意思不好理解,需要结合服务器的设计演化来理解它的用途

多线程版本设计
暂时无法在飞书文档外展示此内容

多线程版本缺点

  • 内存占用高
  • 线程上下文切换成本高
  • 只适合链接数少的场景

线程池版本设计
暂时无法在飞书文档外展示此内容

线程池版缺点

  • 阻塞模式下,线程只能处理一个socket连接。
  • 仅适合短链接场景。

selector版本设计
selector的作用就是配合一个线程来管理多个channel,获取这些channel上发生的事件,这些channel工作在
非阻塞模式下,不会让线程吊死在一个channel上。适合连接数特别多,但流量低的场景(low traffic)
暂时无法在飞书文档外展示此内容
调用selector的select()会阻塞直到channel发生了读写就绪事件,这些事件发生,select方法就会返回这些事
件交给thread来处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值