你如果 , 缓缓把手举起来 , 举到顶,再突然张开五指 , 那恭喜你,你刚刚给自己放了个烟花 。模块介绍
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 知识图谱-生物信息学-医学顶刊论文:生物信息学中的图表示学习:趋势、方法和应用
- 微信我的收藏怎么删除(公安局能调取已删微信记录吗)
