Netty整理
Netty 是什么
-
高性能NIO框架
-
提供了简单易用的API
-
支持多种数据协议和序列化
-
扩展性好
核心组件有哪些
-
Channel
对网络操作的抽象, bind(), connect(),read(), write()
比较常用的有NioServerSocketChannel和NioSocketChannel
-
EventLoop
用于处理连接的生命周期中发生的事件, 监听网络事件并调用事件处理器进行相应IO操作的处理.
-
ChannelFuture
IO操作异步, 通过CHannelFuture接口的addListener可以注册ChannelFutureListener
-
ChannelHandler
消息的具体处理器
-
ChannelPipeline
ChannelHandler的链
Netty线程模型
- 单线程模型, bossEventGroup和workEventGroup都用一个EventLoopGroup, 并且这个EventLoopGroup设置线程数为1
- 多线程模型, bossEventGroup和workEventGroup都用一个EventLoopGroup, 并且这个EventLoopGroup设置线程数为大于1
- 主从多线程模型,bossEventGroup和workEventGroup都用自己的EventLoopGroup
TCP 粘包/拆包
基于TCP发送数据时, 出现多个字符串粘到一起
Netty中的解决方案: FixedLengthFrameDecoder, DelimiterBasedFrameDecoder, LengthFieldBasedFrameDecoder
Netty心跳
TCP自带长连接选项, SO_KEEPALIVE, 在Netty中实现心跳机制的话,核心类是IdleStateHandler
Netty零拷贝
- CompositeByteBuf类
- Slice操作
- FileRegion包装的FileChannel.tranferTo
Netty高性能
- 心跳
- 串行无锁化
- 可靠性
- 安全性
- SO_NODELAY
- 内存池设计
- 零拷贝
- IO线程模型