Netty4.x 的逆袭之路
2020年9月18日
(傅哥的谆谆教诲)
Java 目前有三种IO共存;分别是 BIO、NIO 和 AIO
- BIO : Block-IO 阻塞 IO 发起请求, 阻塞等待, 完成请求 (并发场景通过开启多条线程来完成)
- NIO : New - IO 阻塞 IO 轮询事件查询器(轮询为阻塞等待, 此处可手动释放阻塞), 当有事件产生时解除阻塞
- AIO : Asynchronous IO 异步 IO 轮询动作不在阻塞用户线程, 当有事件产生时通知用户线/.
BIO : 面向流 一个字节输入一个字节输出
NIO : 面向缓冲区;
补充: IO 的四种模型
BIO、NIO、AIO、多路复用
按照傅哥的例子写了两个IO的操作 AIO 和 BIO , 之前自己用 NIO 写过一个 reactor 主从多线程的模式. 所以没有继续去写 NIO 的代码
写下来发现傅哥他从第一行代码开始就将整个架构的思想放了进去. 包括抽象的 适配器与通道的处理器 channelhandler. 思想领会了
即开闭原则, 这里用到了模板方法设计模式, 定制了规范, 不同的处理器由自己去实现.
整体感觉代码较复杂 , 可扩展性较好. 入门学习难度 128 颗星.
总结:
- 有些事情,先不要想为什么,先去做。做完也许你就知道了答案。不做就一直在怀疑。
接触到Netty之后发现, 原来傅哥从一开始就想着用Netty的思路来进行代码编写案例教程 此时竖起大拇指.
2020年9月23日
傅哥英语不怎么样, bing. emm…
public static void main(String[] args) {
new NettyServer().bing(7397);
}
private void bing(int port) {
netty 正式开始, 这里为了学习效率, 使用的为源码包. 直接拉的netty github 4.1 的分支代码
这里有个比较有意思的事情, 就是netty源码拿下来运行时发现少个包
import io.netty.util.collection.IntObjectMap;
当然最后来发现这个包是在编译期使用groovy脚本生成的
a-source-code/netty4.1/common/src/main/script/codegen.groovy
使用.java的源码netty, 然后根据傅哥的代码下来, 程序正常执行. 日志正常输出
链接报告开始
链接报告信息:有一客户端链接到本服务端
链接报告IP:192.168.30.32
链接报告Port:2333
链接报告完毕
总结
101:
-
EventLoopGroup 是什么? 这个模式很像之前写的 NIO 主从模型
-
ChannelFuture sync = bootstrap.bind(port).sync();
sync.channel().closeFuture().sync();这两行代码干了什么? sync
-
parentGroup.shutdownGracefully();
childGroup.shutdownGracefully();
优雅的关闭?? 有多优雅? -
bootstrap 配置的一系列参数问题, 为什么是 128 ? 为什么用 childhandler
2020年9月23日
傅哥前面的大篇幅代码没解释有点难受
102 案例跑通
链接报告开始
链接报告信息:有一客户端链接到本服务端
链接报告IP:192.168.30.32
链接报告Port:2333
链接报告完毕
Wed Sep 23 14:40:22 CST 2020接收到消息:1111
Wed Sep