线程模型
1.概述 主从Reactor模式 一个BossEventGroup默认含有一个EvnetLoop对应一个线程 通过selector获得客户端的注册事件后将获得的socketChannel注册到从WorkerEventGroup随机获取的一个EventLoop对应的selector上 由该EventLoop负责处理随后的IO事件
组件
1.Selector java的nio包提供 用于获取连接的socketChannel 可以支持一对多的情况 避免单线程IO阻塞的情况
2.EventLoopGroup/EventLoop EventLoopGroup为EventLoop集合 EventLoop是线程的封装 内部持有一个selector实例用于管理多个socketChannel 一个TaskQueue和一个DelayedTaskQueue分别用于存放任务和延时任务
3.ChannelPipeline 每个SocketChannel持有一个ChannelPipeline 在每个ChannelPipeline中持有一个ChannelHandler组成的链表 该链表有一个固定的head和tail节点进行特殊操作 自定义的ChannelHandler可实现ChannelInBoundHandler和ChannelOutBoundHandler用于在对应的SocketChannel收到/发送消息时对消息进行处理
TCP粘包拆包
1.概述 TCP协议根据缓冲区大小划分包上传至上层应用或者发送 因此将完整的包变得不完整
2.解决方案 固定长度配合空格 特殊字符划分包 消息格式改为消息头和消息体其中消息头含有消息体的长度 Netty已经提供几个常见的粘包拆包器
HashWheelTimer
1.概述 底层结构基于DelayedQueue 原理每圈有固定长度和固定刻度 每过固定长度/固定刻度时间改变一次下标 对应下标任务执行
网友评论