| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> Netty介绍与实战(三)之粘包拆包 -> 正文阅读 |
|
[网络协议]Netty介绍与实战(三)之粘包拆包 |
一、传统NIO架构step1. 我们传统的nio架构已经解决了多路复用,零拷贝等问题,已经十分优秀了,那为什么我们现在Netty如此火热呢? 1) 首先他使用简单,基本上都是模板化,我们可以更专注业务。具体使用可参考Netty介绍及实战 2)社区活跃,成熟稳定。 3)提供编解码功能,和处理粘包、拆包的功能。 4)替我们修复了NIO的大量bug , 不需要考虑复杂的网络协议。 step2.什么是粘包、拆包? 1)上图我们可以看到,所有的message都会放到我们对应的缓冲区当中。 缓冲区:TCP在接受数据的时候,有一个滑动窗口来控制接受数据的大小,这个滑动窗口你就可以理解为一个缓冲区。 ? ? ? ? case2:右上第二第三条消息:每个message的长度比较小,TCP将多次写入的消息一次性的发送出去。 ? ? ? ? case3:报文长度大于最大报文长度也会出现拆包。 二、Netty架构step1.network application framework ?step2. Netty server architecture ?Step3.一个简单数据接收,响应的流程图 1)一个加密数据传输过来,首先经过我们的handler去找到对应的channel去处理,然后将报文交给解密的handler去解析报文,之后将数据传递给业务端,业务端处理之后,再次将响应报文encode之后传递出去(代码:Netty介绍及实战)。 Step4.netty如何处理粘包,拆包呢? 设想,如果一个数据来了如果我不知道数据的具体长度,我们怎么能精准的拆包呢。 所以我们可以在报文的头部,用一部分字节来去标记整条报文的长度,这样按照长度去读取,这样不就可以精准的获取到原始的每一条报文结构了么。于是Netty也提供了这个方法: LengthFieldBasedFrameDecoder 它是基于消息头指定消息长度进行粘包拆包处理的。 还有其他不同类型的拆包方法,大家也可以再了解一下。如有错误欢迎指出,共同学习! |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/26 3:53:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |