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

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

2 双工收发

2.1 单工通信


任一时刻,数据只能单向传输,一个人说时,另一个人只能听。

HTTP 1.0协议就是这样,客户端与服务端建立个连接后,客户端发个请求,直到服务端返回响应或请求超时,这段时间内,这个连接通道上不能再发其他请求。


这种单工通信,效率低,很多浏览器和APP为解决性能问题,只能同时在服务端和客户端间创建多条连接。


单工通信时,一句对一句,请求和响应按序依次收发,有个天然对应关系。就像被女朋友质问时,女朋友问一句,你才敢答一句。这沟通效率有何意义?



2.2 双工通信

而TCP连接是全双工通道,可同时进行数据的双向收发,互不影响。要提高吞吐量,应用层协议必须支持双工通信。


双工通信,不管是客户端还是服务端建立好连接后,双方都能基于该socket进行收发消息,而不是服务器只能accept到message后才能做些处理。


如果说你和你对象有边听边说的本事,换成双工协议后,基本就是在和女人讲道理,你们就会混乱到分不清到底在回答问题or陈述观点。

并发下,顺序也无法保证。实际设计协议时,一般不关心顺序,只需确保请求和响应能够正确对应。



解决对应问题

发送请求时,给每个请求加个序号:该序号在本次会话内保证唯一,然后在响应中带上请求的序号,这就能把请求和响应对应上。

加上序号后,即使如抢答一般混乱,也分得清到底在说啥。

你和你对象就能对自己发出去的请求来编号,回复对方响应的时候,带上对方请求的编号即可。这就解决了双工通信的主要问题。


在一次会话过程中,开头的先是唯一序列号吗?然后后面跟数据长度,再是内容吗?

那接到消息的一方,如何分辨序列号的长度大小,做到区分序列号和内容前的数据长度信息?


开头就肯定是数据长度,序号也是数据的一部分!所以应该在数据长度的后面。


3 总结



设计传输协议时,只要双方应用程序能够识别传输协议,互相交流即可,并没啥绝对的规范。


首要得解决断句,有“分隔符”和“前置长度”两种断句方案。


使用ID来标识请求与响应对应关系的方法,是比较通用的实现双工通信的方法,可有效提升数据传输的吞吐量。


解决了断句,实现了双工通信,配合专用序列化方法,即可实现高性能的网络通信协议,实现高性能的进程间通信。很多MQ、RPC框架都是用这种方式来实现它们自己的私有应用层传输协议。



简单的高性能通信程序:你和你对象三组对话,服务端是你对象,客户端是你自己,让俩人在客厅碰见一百万次,记录下总共耗时。


https://github.com/WangYangA9/netty-FullDuplex-example

https://sourcegraph.com/github.com/swgithub1006/mqlearning/-/tree/src/main/java/org/coffee/mqlearning


目录
相关文章
|
18小时前
|
域名解析 缓存 网络协议
DNS协议 是什么?说说DNS 完整的查询过程? _
DNS是互联网的域名系统,它像翻译官一样将域名转换成IP地址。域名由点分隔的名字组成,如www.xxx.com,包含三级、二级和顶级域名。查询方式分为递归和迭代,递归是请求者必须得到答案,而迭代则是服务器指引请求者如何获取答案。域名解析过程中,会利用浏览器和操作系统的缓存,如果缓存未命中,本地域名服务器会通过递归或迭代方式向上级服务器查询,最终得到IP地址并返回给浏览器,同时在各级缓存中保存记录。
DNS协议 是什么?说说DNS 完整的查询过程? _
|
1天前
|
域名解析 编解码 负载均衡
【域名解析DNS专栏】域名解析中的EDNS扩展:提升DNS协议灵活性
【5月更文挑战第27天】EDNS(Extension Mechanisms for DNS)是为了解决传统DNS协议在复杂网络环境下的灵活性和扩展性问题而诞生的技术。它允许在DNS请求和响应中添加额外选项,提高查询效率,支持更大数据范围,增强安全性,并实现负载均衡和故障转移。通过在DNS消息中包含EDNS部分,客户端和服务器能交换更多信息,实现更复杂的逻辑。EDNS的使用示例代码展示了如何在Python中创建和处理EDNS选项。随着技术进步,EDNS将在域名解析领域扮演更重要角色。
|
5天前
|
程序员
深入解析:分布式一致性的终极解决方案——XA协议
本文介绍了分布式系统中的两种一致性协议:2PC(两阶段提交)和3PC(三阶段提交)。2PC分为准备和提交两个阶段,确保所有参与者在提交前达成一致。3PC则在2PC基础上增加了一个CanCommit阶段,提高容错性和可用性,参与者在超时后可自行中断事务。选择协议需依据业务需求和系统特点,高一致性要求可选3PC,注重性能则选2PC。
13 0
|
8天前
|
网络协议 程序员 网络架构
最全OSPF路由协议基础(OSPF基本配置),2024年最新Python高级面试
最全OSPF路由协议基础(OSPF基本配置),2024年最新Python高级面试
最全OSPF路由协议基础(OSPF基本配置),2024年最新Python高级面试
|
8天前
|
Python
2024年最全用Python写了一个电子考勤系统_用python写一个宿舍考勤系统,2024年最新1307页阿里Python面试全套真题解析在互联网火了
2024年最全用Python写了一个电子考勤系统_用python写一个宿舍考勤系统,2024年最新1307页阿里Python面试全套真题解析在互联网火了
|
8天前
|
机器学习/深度学习 编解码 算法
算法工程师面试问题总结 | YOLOv5面试考点原理全解析
本文给大家带来的百面算法工程师是深度学习目标检测YOLOv5面试总结,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们还将介绍一些常见的深度学习目标检测面试问题,并提供参考的回答及其理论基础,以帮助求职者更好地准备面试。通过对这些问题的理解和回答,求职者可以展现出自己的深度学习目标检测领域的专业知识、解决问题的能力以及对实际应用场景的理解。同时,这也是为了帮助求职者更好地应对深度学习目标检测岗位的面试挑战,提升面试的成功率和竞争力。
|
11天前
|
前端开发 JavaScript
Web前端开发之面试题全解析 一,2024年最新面经牛客
Web前端开发之面试题全解析 一,2024年最新面经牛客
|
11天前
|
移动开发 前端开发 JavaScript
Web前端开发之面试题全解析 一(3),前端面试题背不下来怎么办
Web前端开发之面试题全解析 一(3),前端面试题背不下来怎么办
|
11天前
|
前端开发 算法 搜索推荐
Web前端开发之面试题全解析 一(1),2024年最新前端组件化面试
Web前端开发之面试题全解析 一(1),2024年最新前端组件化面试
|
11天前
|
Linux 网络安全
CentOS系统openssh-9,网络安全大厂面试真题解析大全
CentOS系统openssh-9,网络安全大厂面试真题解析大全

热门文章

最新文章

推荐镜像

更多