Netty整理

91 阅读1分钟

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线程模型