消息队列面试解析 - 传输协议(上)

简介: 消息队列面试解析 - 传输协议

0 前言

应用程序之间要想互相通信,一起配合来实现业务功能,还需传输协议支持。

传输协议就是应用程序之间对话的语言。设计传输协议,并无太多规范和要求,只需通信双方的应用程序都能正确处理该协议&&无歧义。


1 断句

1.1 分隔符

传输协议也是种语言,传输数据时,首要解决的就是断句。


对传输层,收到的数据是怎样的?


就是一段段的字节,但因网络不确定性,你收到的分段并不一定是生产者发出去的分段。


那在协议中也加上“标点符号”不就行?


而且,并不需要像自然语言中那么多种的标点符号,而只需定义一个分隔符即可。


这办法的确可行,很多传输协议就采用这种方法,比如HTTP 1.0协议,它的分隔符是换行(\r\n)。但这有个问题:自然语言中,标点符号是专用的,它没有别的含义,和文字天然区分。

但在数据传输过程,无论你定义什么字符作为分隔符,理论上都有可能会在传输的数据中出现。



那如何区分“数据内的分隔符”和真正的分隔符?


得在发送数据阶段,加上分隔符前,把数据内的分隔符转义,收到数据后再转义回来。

这的确是个麻烦过程,损失了一些性能。


1.2 预置长度

更加实用的方法。


给每句话前面加一个表示这句话长度的数字,收到数据时,按长度读。


如:03下雨天03留客天02天留03我不留

这里固定使用2位数字存放长度,每句话最长可支持99个字。接收后的处理就简单了,先读取2位数字03,知道接下来3个字是第一句话,那就等这3个字都收到,即可作为第一句话,同理读第二句话、第三句话。


这很好解决断句问题,实现比分隔符方法更简单,性能也更好,是普遍采用的分隔数据的方法。



redis 的 aof 文件好像就是前置长度哦,经典方案无处不在~    


前置长度是不是也有类似问题呢,03也可能是正常文字里的内容,也是要转义

吧?


你可以想一下,最好自己实现一下接收数据进行解析的代码,你就会明白,前置长度无需转义。因为解析时,可明确知道当前读到的这个位置应该是长度还是真正数据,它不需要根据数据流中的内容来确定。

目录
相关文章
|
2月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
2月前
|
并行计算 数据挖掘 大数据
[go 面试] 并行与并发的区别及应用场景解析
[go 面试] 并行与并发的区别及应用场景解析
|
21天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
178 37
|
16天前
|
缓存 Android开发 开发者
Android RecycleView 深度解析与面试题梳理
本文详细介绍了Android开发中高效且功能强大的`RecyclerView`,包括其架构概览、工作流程及滑动优化机制,并解析了常见的面试题。通过理解`RecyclerView`的核心组件及其优化技巧,帮助开发者提升应用性能并应对技术面试。
40 8
|
16天前
|
存储 缓存 Android开发
Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,详细解析了 `RecyclerView` 的缓存机制,包括多级缓存的原理与流程,并提供了常见面试题及答案。通过本文,你将深入了解 `RecyclerView` 的高性能秘诀,提升列表和网格的开发技能。
39 8
|
2月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
107 0
|
2月前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
2月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
58 6
|
21天前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
25天前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析

推荐镜像

更多
下一篇
无影云桌面