IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> netty 与 网络编程 TCP 粘包半包问题 与及 netty 编解码方式 -> 正文阅读

[网络协议]netty 与 网络编程 TCP 粘包半包问题 与及 netty 编解码方式

1 何为粘包 / 半包?
对方一次性接收了多条消息这种现象,我们就称之为 粘包现象。
对方多次接收了不完整消息这种现象,我们就称之为 半包现象。

粘包的原因
发送方发送的消息 < 缓冲区大小
接收方读取消息不及时

半包的原因
类比粘包,如果发送的消息太大,已经 超过了缓冲区的大小,这时候就 必须拆分发送,也就 形成了半包现象。
半包的原因:
发送方发送的消息 > 缓冲区的大小
发送方发送的消息 > 协议的 MTU

表面原因:
1 发送消息的时候如果消息太小,先放到缓冲区里面放着,等数据够多了再一起发送;如果消息太大,则拆成多个消息分批发送。
2 那么,本质原因是缓冲区吗?当然不是,缓冲区的存在是为了提高发送消息的效率。
本质原因是: TCP 是流式协议,消息无边界
TCP 协议本身像水流一样,源源不断,完全不知道消息的边界在哪里。

UDP 协议不会出现粘包 / 半包现象,它的消息是有明确边界的,不会像 TCP 一样出现粘包 / 半包现象。

怎么解决粘包 / 半包?
根本方法:解决消息的边界

业界就衍生出了三种常用的解决粘包 / 半包问题的方法:
定长法、
分割符法、
长度 + 内容法
Netty 为什么解码类后面都是 *FrameDecoder 呢?那是因为被解码之后的消息又叫作一帧一帧的消息,所以称为 “ 帧解码器 。

为什么需要一次编解码和二次编解码呢
一次解码主要用于解决粘包 / 半包的问题,将缓冲区中的字节数组按照协议本身的格式进行分割,其实,分割后的数据还是字节数组。
二次解码,可以将字节数组转换成 Java 对象。

既然一次解码的时候都已经解出了对应的字节数组,何不顺势将其序列化成 Java 对象呢?所以,一次编解码和二次编解码可以合并吗?
可以,但是不建议,这里主要运用了分层的思想。
举个简单的例子,
比如一次编解码我们采用的是 “ 长度 + 内容法 ” ,二次编解码一开始使用的是 XML ,后面换成了 JSON ,其实一次编解码我们不需要修改,只需要修改二次编解码就可以了。但是,如果二者合为一体了,那我们在后面实现 JSON 编解码的时候又要重新实现一下 “ 长度 + 内容 ” 的一次编解码的过程。分层的思想很重要,在 Java 中随处可见,比如,著名的 MVC 分层思想。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 12:24:57  更:2021-08-19 12:27:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 19:04:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码