Netty网络应用基础

系列文章目录

1. Netty网络应用基础
2. Java I/O
3. IO/模型
4. 网络应用编解码
5. Netty Pipeline
6. Netty EventLoopGroup&EventLoop
7. Netty ThreadLocal&FastThreadLocal
8. Netty Future&Promise
9. Netty内存管理–(旧)PoolChunk&伙伴分配
10. Netty内存管理–内存池空间规格化SizeClasses
11. Netty内存管理–PoolChunk&PoolSubPage
12. Netty内存管理–内存池PoolArena
13. Netty内存管理–内存分配器PooledByteBufAllocator
14. Netty ObjectPool


前言

开始之前,咱们先澄清一些基础概念、总体框架和应用分层,避免在后续的讨论中给大家带来误解。


一、基础概念

狭义网络

常规Java后端开发中应用到的计算机网络,基于TCP/IP协议栈,运行在CentOS操作系统下。此外,由于UDP传输本人不擅长,因此后续会更多讨论TCP传输。

网络应用

基于网络完成大部分业务逻辑,网络将整个应用在逻辑上被划分为server端、client端和网络通信三部分。在架构设计时,需要考虑server端和client端的业务划分,网络通信部分则更多关注数据传输方式和网络波动对业务动作的影响。鉴于业务是丰富多样的,后续的内容更多关注在TCP协议下的数据传输方式和网络波动处理相关。

工程库

显然就是Netty,选择原因有这么几个:

  1. NIO模型在资源占用和延迟上都比较优秀,并解决Java NIO bug;
  2. 串行无锁化机制使其具有良好的扩展,并保持高性能;
  3. 提供网络应用开发场景下的定制工具,如HashWheelTimer处理超时,对ByteBuffer的改进,FastThread,基于jmelloc的缓存池管理等。
    后续关于Netty的讨论也会围绕这些关键点展开。

二、总体框架

基本框架图
从图中,我们可以得到几点知识:

  1. Netty在整个网络应用中的位置,以及处理的逻辑实体单位;
  2. 不同网络层次处理的逻辑实体单位是不同的。当你和别人讨论特定层次的问题时,请注意你的单位是什么。比如你得到一个网络抓包文件,然后筛选出TCP协议的内容,此时的内容都是TCP segment 也就是TCP报文,而不应该是TCP数据包。
  3. 如果你对软件的特点相对了解就会知道,从上到下带宽越来越宽,那么物理层就是整个带宽的极限,无论我们如何优化上层都不可能超越,就如同道路就是一根单行道路,不改造你咋玩也跑不出4车道的效果。
  4. Netty本身其实对TCP还是UDP是不挑的,所以在传输层我并没有框定是TCP还是UDP。

三、应用分层

请添加图片描述
Netty实际解决的问题:

  1. 从传输层层读取byte[]: 编解码器解决TCP分包/粘包问题,控制发送速率;
  2. 反序列化为message:I/O逻辑与逻辑处理,解耦包括代码组织解耦和运行时解耦,ChannelPipeline 和 Future, EventLoop
  3. 序列化message为byte[] :缓存管理和对象池化 BufferManagement和Rcycler
  4. 连接状态维护;接入管理、心跳保话;

总结

以上就是今天想聊的内容,本文介绍了后续讨论的基本概念、总体框架和应用分层,为后续的讨论打下基础。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值