你如果 , 缓缓把手举起来 , 举到顶,再突然张开五指 , 那恭喜你,你刚刚给自己放了个烟花 。模块介绍
netty-bio
:阻塞型
网络通信demo 。
netty-nio
: 引入channel(通道)、buffer(缓冲区)、selector(选择器)的概念,采用事件驱动的方式
,使用单个线程就可以监听多个客户端通道 ,改进bio模式下线程阻塞等待造成的资源浪费
。
netty-demo
: Netty小demo,认识Netty初体验 。
netty-groupchat
: 使用Netty编写一个群聊系统 。
netty-http
: Netty的HTTP调用demo 。
netty-bytebuf
: Netty缓冲区使用demo 。
netty-decoder
: Netty编解码,handler调用链使用示例 。
netty-idlestate
: Netty心跳包使用示例 。
netty-sticking
: 自定义协议与handler,解决TCP传输粘包与拆包问题 。
netty-rpc
: 使用Netty自定义实现RPC
通信 。
netty-bio
模块模拟测试采用socket的bio
方式进行网络通信 。blocking io
:同步并阻塞
,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事情就会进入阻塞等待状态,造成不必要的线程开销 。适用于
连接数据小且连接固定
的系统架构 。架构示意图:
文章插图
netty-nio
模块non-blocking io
:同步非阻塞
,在bio
的架构上进行改进,引入channel(通道)、buffer(缓冲区)、selector(选择器)的概念,采用事件驱动的方式 , 使用单个线程就可以监听多个客户端通道,改进bio
模式下线程阻塞等待造成的资源浪费 。架构示意图:
文章插图
关键:select会根据不同的事件,在各个channel通道上进行切换 。
缓冲区buffer本质上是一个可以读写数据(关键)的内存块,
nio
的读取与写入数据都必须是经过buffer的 。通道channel把通道看做流、把通道看做流、把通道看做流 , 重要的事情说三遍,会很好理解 。
nio
引入的通道类似bio
中流的概念,不同之处在于:- 通道可以同时进行读写操作,而流只能读或者写
- 通道可以实现异步读写数据
- 通道可以从缓冲区读数据,也可以写数据到缓冲区(双向的概念)
NIOFileOper01
: 本地文件写数据使用ByteBuffer
与FileChannel
,将“hello,李嘉图”NIOFileOper01.txt
文件中 。NIOFileOper02
: 本地文件读数据使用ByteBuffer
(缓冲) 和 FileChannel
(通道),将 NIOFileOper01.txt
中的数据读入到程序,并显示在控制台屏幕NIOFileOper03
: 使用一个Buffer完成文件读取使用 FileChannel
(通道) 和 方法 read , write,完成文件的拷贝NIOFileCopy
:拷贝文件 transferFrom
方法使用 FileChannel
(通道) 和 方法 transferFrom
,完成文件的拷贝选择器Selector核心:selector能够检测多个注册的通道上是否有事件发生(多个channel以事件的方式可以注册到同一个selector),如果有事件发生,便获取事件然后针对每个事件进行相应的处理 。这样就可以做到只使用一个单线程去管理多个通道 。
只有在连接/通道真正有读写事件发生时,才会进行读写
,就大大地减少了系统开销 , 并且不必为每个连接都创建一个线程,不用去维护多个线程 。原理图:
文章插图
说明:
- 当客户端连接时,会通过
ServerSocketChannel
得到SocketChannel
。
- Selector进行监听select方法,返回有事件发生的通道的个数 。
- 将
socketChannel
注册到Selector上,register(),一个selector上可以注册多个SocketChannel
。
- 注册后返回一个
selectionKey
,会和该selector关联 。
- 进一步得到各个
selectionKey
(有事件发生) 。推荐阅读
- HDFS基础学习
- 【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?
- 记录一次sshd服务启动失败
- 零基础如何学游戏编程(游戏编程学习入门)
- 机器学习实战-AdaBoost
- Pytorch模型量化
- 三 【单片机入门】应用层软件开发的单片机学习之路-----UART串口通讯和c#交互
- 二 【SSM】学习笔记——SpringMVC入门
- Briefings in Bioinformatics-2021 知识图谱-生物信息学-医学顶刊论文:生物信息学中的图表示学习:趋势、方法和应用
- 微信我的收藏怎么删除(公安局能调取已删微信记录吗)