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

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

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


目录
相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
76 2
|
3月前
|
域名解析 存储 网络协议
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
本文详细介绍了IP协议报头结构及其各字段的功能,包括版本、首部长度、服务类型、总长度、标识、片偏移、标志、生存时间(TTL)、协议、首部检验和等内容。此外,还探讨了IP地址的网段划分、特殊IP地址的应用场景,以及路由选择的大致流程。最后,文章简要介绍了DNS协议的作用及其发展历史,解释了域名解析系统的工作原理。
157 5
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
166 3
|
3天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
27 1
|
22天前
|
Java 程序员
面试官的加分题:super关键字全解析,轻松应对!
小米,29岁程序员,通过一个关于Animal和Dog类的故事,详细解析了Java中super关键字的多种用法,包括调用父类构造方法、访问父类成员变量及调用父类方法,帮助读者更好地理解和应用super,应对面试挑战。
37 3
|
28天前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
56 3
|
9天前
|
传感器
Modbus协议深入解析
Modbus协议是由Modicon公司(现施耐德电气)于1979年发明的串行通信协议,主要用于工业自动化系统中的PLC通信。本文深入解析了Modbus协议的主从模式、数据类型(线圈、离散输入、保持寄存器、输入寄存器)、帧结构和通信过程,并介绍了其应用场景和重要性。
15 0
|
1月前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
106 3
|
1月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
87 2
|
1月前
|
存储 NoSQL MongoDB
MongoDB面试专题33道解析
大家好,我是 V 哥。今天为大家整理了 MongoDB 面试题,涵盖 NoSQL 数据库基础、MongoDB 的核心概念、集群与分片、备份恢复、性能优化等内容。这些题目和解答不仅适合面试准备,也是日常工作中深入理解 MongoDB 的宝贵资料。希望对大家有所帮助!

推荐镜像

更多