Netty学习记录-入门篇

你如果 , 缓缓把手举起来 , 举到顶 , 再突然张开五指 , 那恭喜你 , 你刚刚给自己放了个烟花 。
模块介绍
  1. netty-bio: 阻塞型网络通信demo 。
  2. netty-nio: 引入channel(通道)、buffer(缓冲区)、selector(选择器)的概念 , 采用事件驱动的方式 , 使用单个线程就可以监听多个客户端通道 , 改进bio模式下线程阻塞等待造成的资源浪费
  3. netty-demo: Netty小demo,认识Netty初体验 。
  4. netty-groupchat: 使用Netty编写一个群聊系统 。
  5. netty-http: Netty的HTTP调用demo 。
  6. netty-bytebuf: Netty缓冲区使用demo 。
  7. netty-decoder: Netty编解码 , handler调用链使用示例 。
  8. netty-idlestate: Netty心跳包使用示例 。
  9. netty-sticking: 自定义协议与handler , 解决TCP传输粘包与拆包问题 。
  10. netty-rpc: 使用Netty自定义实现RPC通信 。
Demo地址:https://gitee.com/LHDAXIE/netty
netty-bio模块模拟测试采用socket的bio方式进行网络通信 。
blocking io同步并阻塞 , 服务器实现模式为一个连接一个线程 , 即客户端有连接请求时服务器就需要启动一个线程进行处理 , 如果这个连接不做任何事情就会进入阻塞等待状态 , 造成不必要的线程开销 。
适用于连接数据小且连接固定的系统架构 。
架构示意图:
Netty学习记录-入门篇

文章插图
netty-nio模块non-blocking io同步非阻塞 , 在bio的架构上进行改进 , 引入channel(通道)、buffer(缓冲区)、selector(选择器)的概念 , 采用事件驱动的方式 , 使用单个线程就可以监听多个客户端通道 , 改进bio模式下线程阻塞等待造成的资源浪费 。
架构示意图:
Netty学习记录-入门篇

文章插图
关键:select会根据不同的事件 , 在各个channel通道上进行切换 。
缓冲区buffer本质上是一个可以读写数据(关键)的内存块 , nio的读取与写入数据都必须是经过buffer的 。
通道channel把通道看做流、把通道看做流、把通道看做流 , 重要的事情说三遍 , 会很好理解 。nio引入的通道类似bio中流的概念 , 不同之处在于:
  • 通道可以同时进行读写操作 , 而流只能读或者写
  • 通道可以实现异步读写数据
  • 通道可以从缓冲区读数据 , 也可以写数据到缓冲区(双向的概念)
NIOFileOper01: 本地文件写数据使用ByteBufferFileChannel , 将“hello,李嘉图”NIOFileOper01.txt文件中 。
NIOFileOper02: 本地文件读数据使用ByteBuffer(缓冲) 和 FileChannel(通道) ,  将 NIOFileOper01.txt中的数据读入到程序 , 并显示在控制台屏幕
NIOFileOper03: 使用一个Buffer完成文件读取使用 FileChannel(通道) 和 方法 read , write , 完成文件的拷贝
NIOFileCopy:拷贝文件 transferFrom 方法使用

经验总结扩展阅读