当前位置: 首页 > news >正文

AQchat

在当前项目里,Handler 类主要用于处理不同类型的命令或者消息,下面按照不同功能模块为你详细介绍各 Handler 的作用。

命令处理 Handler(位于 com.howcode.aqchat.handler.impl 包)

  • SyncRoomMembersCmdHandler:处理同步房间成员命令。验证用户登录状态和是否加入指定房间,若验证通过则获取房间所有成员信息并返回给客户端。
// 验证用户登录和房间信息,同步房间成员信息
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.SyncRoomMembersCmd cmd) {// ...已有代码...
}
  • JoinRoomCmdHandler:处理加入房间命令。验证用户登录状态、是否已在房间中以及房间号是否存在,若都满足条件则将用户加入房间并返回加入成功消息。
// 验证用户登录和房间信息,将用户加入房间
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.JoinRoomCmd cmd) {// ...已有代码...
}
  • SendMsgCmdHandler:处理发送消息命令。验证消息 ID、用户登录状态、是否在房间以及房间是否存在等信息,若验证通过则发送消息并处理 AI 消息,最后返回消息发送成功消息。
// 验证消息和用户信息,发送消息并处理 AI 消息
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.SendMsgCmd cmd) {// ...已有代码...
}
  • LeaveRoomCmdHandler:处理离开房间命令。验证用户登录状态、是否在房间以及房间是否存在,若验证通过则将用户从房间移除,判断房间是否为空并决定是否解散房间,最后返回离开房间成功消息。
// 验证用户登录和房间信息,将用户从房间移除
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.LeaveRoomCmd cmd) {// ...已有代码...
}
  • CreateRoomCmdHandler:处理创建房间命令。验证用户登录状态、是否已在房间以及房间号是否已存在,若都满足条件则创建房间,将创建者加入房间,处理 AI 助手相关操作,最后返回创建房间成功消息。
// 验证用户登录和房间信息,创建房间并将用户加入房间
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.CreateRoomCmd cmd) {// ...已有代码...
}
  • OpenAiRoomCmdHandler:处理创建 AI 房间命令。验证用户登录状态、是否已在房间,若都满足条件则创建 AI 房间,将创建者和 AI 成员加入房间,最后返回创建 AI 房间成功消息。
// 验证用户登录和房间信息,创建 AI 房间并将用户和 AI 成员加入房间
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.OpenAiRoomCmd cmd) {// ...已有代码...
}
  • RecoverUserCmdHandler:处理恢复用户命令。验证用户信息是否存在,若存在则重新登录用户,添加用户 channel,判断用户是否有房间,若有则将用户加入房间,最后返回用户信息。
// 验证用户信息,恢复用户登录状态并处理房间信息
@Override
public void handle(ChannelHandlerContext ctx, AQChatMsgProtocol.RecoverUserCmd cmd) {// ...已有代码...
}

AI 消息处理 Handler(位于 com.howcode.aqchat.handler.at.chain 包)

这些 Handler 采用责任链模式处理 AI 消息,若当前 Handler 无法处理消息,则将消息传递给下一个 Handler

  • XQHandler:判断消息是否 @ 了 AI 助手,若是则复制消息,修改消息 ID 和内容,去掉 @AI 部分,然后通过消息队列发送给 AI 助手。
// 判断消息是否 @ 了 AI 助手,处理 AI 消息
@Override
public void handleMessage(MessageDto messageDto) {// ...已有代码...
}
  • MultipleRoundsHandler:判断房间类型是否为 AI 空间且消息扩展信息为空,若是则复制消息,修改消息 ID,然后通过消息队列发送进行多轮对话处理。
// 判断房间类型和消息信息,处理多轮对话消息
@Override
public void handleMessage(MessageDto messageDto) {// ...已有代码...
}
  • XMHandler:判断消息是否 @ 了 XM,若是则复制消息,修改消息 ID 和内容,去掉 @XM 部分,然后通过消息队列发送给 XM。
// 判断消息是否 @ 了 XM,处理 XM 相关消息
@Override
public void handleMessage(MessageDto messageDto) {// ...已有代码...
}
  • XTHandler:判断消息是否 @ 了 XT,若是则复制消息,修改消息 ID 和内容,去掉 @XT 部分,然后通过消息队列发送给 XT。
// 判断消息是否 @ 了 XT,处理 XT 相关消息
@Override
public void handleMessage(MessageDto messageDto) {// ...已有代码...
}
  • XVHandler:判断消息是否 @ 了 XV,若是则复制消息,修改消息 ID 和内容,去掉 @XV 部分,然后通过消息队列发送给 XV。
// 判断消息是否 @ 了 XV,处理 XV 相关消息
@Override
public void handleMessage(MessageDto messageDto) {// ...已有代码...
}

工厂类 Handler(位于 com.howcode.aqchat.handler.at 包)

  • HandlerFactory:实现 ApplicationContextAwareInitializingBean 接口,在初始化时获取所有 Handler 实例并构建责任链。提供 handleMessage 方法,处理消息内容,然后将消息传递给责任链的第一个 Handler 进行处理。
// 初始化 Handler 责任链,处理消息并传递给责任链
public void handleMessage(MessageDto messageDto) {// ...已有代码...
}

相关文章:

AQchat

在当前项目里,Handler 类主要用于处理不同类型的命令或者消息,下面按照不同功能模块为你详细介绍各 Handler 的作用。 命令处理 Handler(位于 com.howcode.aqchat.handler.impl 包) SyncRoomMembersCmdHandler:处理同…...

Profibus DP转ModbusTCP网关通讯案例解析

Profibus DP转ModbusTCP网关通讯案例解析 Profibus DP和Modbus TCP都是工业自动化领域中常见的通信协议,各自在不同的应用场景中发挥着重要作用。然而,由于不同设备、系统之间的兼容性需求,常常需要进行这两种协议的转换。本文将介绍一个典型…...

将你的 Rust + WebAssembly 项目发布到 npm

一、准备工作:登录 npm 在发布之前,你需要: 拥有一个 npm 账号 没有的话可前往 https://www.npmjs.com/signup 免费注册。 登录本地 npm 账户 使用 wasm-pack 自带的登录命令: wasm-pack login它会提示你输入 npm token&#xf…...

RGBD惯性SLAM

介绍 本篇介绍一种基于视觉光流法的RGBD惯性SLAM算法,该算法的前身是DEMO算法。 相对于原始版本: 更新了相对较老的IplImage 相关接口 加入了GTSAM后端;滑动窗口后端;3D-3Dbatch优化;点到面batch后端。分别对应不同的…...

linuxbash原理

3417 1647 0 04:17 ? 00:00:21 /usr/libexec/gnome-terminal-server yangang 3425 3417 0 04:17 pts/0 00:00:00 bash yangang 4524 3417 0 04:26 pts/1 00:00:00 bash 控制台创建是通过/usr/libexec/gnome-terminal-server 进行创建 rea…...

ctfshow做题笔记—栈溢出—pwn75~pwn79

目录 前言 一、pwn75(栈空间不够怎么办?) 二、pwn76 三、pwn77(Ez ROP or Mid ROP ?) 四、pwn79(你需要注意某些函数,这是解题的关键!) 前言 嘿嘿,隔了一段时间没有做pwn题了(主播脱单了)&#xff0…...

C++ 标准库中的 <algorithm> 头文件算法总结

C 常用 <algorithm> 算法概览 C 标准库中的 <algorithm> 头文件提供了大量有用的算法&#xff0c;主要用于操作容器&#xff08;如 vector, list, array 等&#xff09;。这些算法通常通过迭代器来操作容器元素。 1. 非修改序列操作 std::all_of, std::any_of, s…...

leecode Hot100之回溯算法【C++速查】

文章目录 [46. 全排列](https://leetcode.cn/problems/permutations/)[78. 子集](https://leetcode.cn/problems/subsets/)[17. 电话号码的字母组合](https://leetcode.cn/problems/letter-combinations-of-a-phone-number/)[39. 组合总和](https://leetcode.cn/problems/combi…...

前端 main.js能做哪些事?

前端 main.js 的从入门到进阶 摘要 在前端开发中&#xff0c;main.js 文件是项目启动的关键入口&#xff0c;它承担着初始化应用、引入依赖、配置全局设置等重要职责。本文将全面介绍 main.js 的基础知识&#xff0c;包括其基本结构和作用&#xff0c;并深入探讨如何进行进阶开…...

JAVA Web_定义Servlet2_学生登录验证Servlet

题目 页面StudentLogin.html中有一HTML的表单代码如下&#xff1a; <form action"studentLogin" method"post">学生姓名&#xff1a;<input type"text" name"stuName" value""><br>登录密码&#xff1a;…...

【信息系统项目管理师】高分论文:论信息系统项目的范围管理(电网公司保供电可视化系统)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划范围管理2、收集需求3、定义范围4、创建工作分解结构(WBS)5、确认范围6、控制范围论文 2017年5月,我作为项目经理参加XX省电网公司保供电可视化系统应用项目的建设,该项目是2017年XX省电网信息化…...

如何高效查询订单销售情况与售罄率:从SQL到架构优化的全流程设计

在电商平台、SaaS多租户系统中,订单数据作为核心数据之一,承载了关键的运营指标,如销售额、商品售罄率、订单转化等。随着数据量的持续增长,如何在大数据量条件下快速、稳定地获取统计信息,成为系统设计的重点之一。 本文将从查询目标分析入手,结合数据库设计优化与典型…...

RTT添加一个RTC时钟驱动,以DS1307为例

添加一个外部时钟芯片 这里多了一个选项 复制drv_rtc.c,重命名为drv_rtc_ds1307.c 添加到工程中 /*** @file drv_rtc_ds1307.c* @brief * @author jiache (wanghuan3037@fiberhome.com)* @version 1.0* @date 2025-01-08* * @copyright Copyright (c) 2025 58* */ #...

Leetcode 独一无二的出现次数

可以通过哈希集来判断是否独一无二&#xff0c;如果set中已经包含了count&#xff0c;那么set.add(count)会返回false class Solution {public boolean uniqueOccurrences(int[] arr) {Map<Integer, Integer> map new HashMap<>();for(int i 0; i < arr.leng…...

ubuntu上,e1000e,i1210有线网卡驱动安装

1&#xff0c;下载附属资源&#xff0c;解压对应的压缩包 tar zxf e1000e-<x.x.x>.tar.gz 2&#xff0c;进入压缩包src目录下 cd e1000e-<x.x.x>/src/ 3&#xff0c;安装 sudo make install 4&#xff0c;重启 reboot e1000e Intel官网下载地址 https://www.i…...

Xmind 2025 中文思维导图

Xmind 2025 中文思维导图 一、介绍 Xmind &#xff0c;是一款出色的思维导图和头脑风暴软件&#xff0c;拥有美观的智能配色方案&#xff0c;便于你轻松理清思路捕捉创意。丰富的导图模板及多种创意整合工具&#xff0c;可助力导图迸发更多活力。还拥有强大演说模式&#xff…...

搭载DeepSeek|暴雨AI教育一体机加速AI教育普及

近日&#xff0c;在全国智算大会上&#xff0c;暴雨公司展示了新一代 AI 教育一体机&#xff0c;通过全栈国产化技术与 DeepSeek 模型的深度适配&#xff0c;打造低成本、高性能的人工智能教育解决方案&#xff0c;助力 AI 教育普及与教育数字化转型。 暴雨AI教育一体机&#…...

【字节跳动AI论文】Seaweed-7B:视频生成基础模型的高成本效益培训

摘要&#xff1a;本技术报告介绍了一种经济有效的视频生成基础模型训练策略。 我们提出了一种中等规模的研究模型&#xff0c;大约有70亿个参数&#xff08;7B&#xff09;&#xff0c;称为Seaweed-7B&#xff0c;使用665,000个H100 GPU小时从头开始训练。 尽管使用适度的计算资…...

java 线程池:IO密集型的任务(CPU核数 * 2 + 1),为什么这么设置,计算密集型任务( CPU核数+1 ),为什么这么设置

文章目录 1. IO密集型任务:`CPU核数 2 + 1`为什么这样设置?示例场景:2. CPU密集型任务:`CPU核数 + 1`为什么这样设置?示例场景:3. 两者的核心差异4. 实际应用中的注意事项5. 总结在Java线程池的配置中, IO密集型和 CPU密集型任务的线程数设置逻辑存在显著差异,核心原…...

RabbitMQ消息的可靠性

生产者的可靠 首先&#xff0c;我们一起分析一下消息丢失的可能性有哪些。 消息从发送者发送消息&#xff0c;到消费者处理消息&#xff0c;需要经过的流程是这样的&#xff1a; 消息从生产者到消费者的每一步都可能导致消息丢失&#xff1a; ● 发送消息时丢失&#xff1a;…...

涵盖通算、智算、超算、量算!“四算合一”算力网络投入使用,效率提升20%

近日&#xff0c;由中国移动承建的全国首个“四算合一”算力网络调度平台日前正式投入使用。这座“数字三峡”的诞生&#xff0c;标志着我国算力基建完成从“单兵作战”到“军团协同”的跃迁。 什么是“四算合一”&#xff1f; “四算合一”是指将通用算力、智能算力、超级算…...

【Redis】数据结构和内部编码

先来复习一下之前学过的几个基本的全局命令&#xff1a; keys&#xff1a;用来查看匹配规则的keyexists&#xff1a;用来判定执行key是否存在del&#xff1a;删除指定的keyexpire&#xff1a;给key设置过期时间ttl&#xff1a;查询key的过期时间type&#xff1a;查询key对应的…...

考研数据结构之二叉树(一)(包含真题及解析)

考研数据结构之二叉树&#xff08;一&#xff09; 下期预告&#xff1a;后续文章将深入探讨二叉树的遍历算法与高频考点&#xff08;如平衡二叉树、线索二叉树&#xff09;。 二叉树是数据结构中的核心内容之一&#xff0c;也是考研高频考点。本文将从定义和存储结构两方面展开…...

linux多线(进)程编程——番外1:内存映射与mmap

前言 在修真世界之外&#xff0c;无数异世界&#xff0c;其中某个叫地球的异世界中&#xff0c;一群人对共享内存的第二种使用方式做出了讲解。 内核空间与用户空间 内存空间的划分 Linux操作系统下一个进程的虚拟地址空间被分为用户空间与内核空间 Linux 内核空间在内存管…...

旧版 VMware 虚拟机迁移至 KVM 平台-案例2

项目背景 需将一台旧版 VMware 虚拟机&#xff08;VMDK 格式&#xff09;迁移至 KVM 虚拟化平台&#xff0c;具体要求如下&#xff1a; 格式转换&#xff1a;将 VMDK 转换为 QCOW2 格式。磁盘扩容&#xff1a;将原 40GB 磁盘扩展至 60GB。密码重置&#xff1a;修改 aiden 用户…...

六、adb通过Wifi连接

背景 收集是荣耀X40,数据线原装全新的&#xff0c;USB连上之后&#xff0c;老是断&#xff0c;电脑一直叮咚叮咚的响个不停&#xff0c;试试WIFI 连接是否稳定&#xff0c;需要手机和电脑用相同的WIFI. 连接 1.通过 USB 连接手机和电脑(打开USB调试等这些都略过) adb device…...

Kafka使用方式与底层原理解析

一、Kafka简介 Apache Kafka是一个分布式流处理平台&#xff0c;由LinkedIn开发并开源&#xff0c;现已成为实时数据管道和流应用的核心组件。它具备高吞吐量、低延迟、高可扩展性等特点&#xff0c;广泛应用于日志收集、消息系统、流处理等领域。 1.1 Kafka核心概念 Topic&…...

【Python内置函数的深度解析与应用】id

目录 前言&#xff1a;技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现1. 基础身份验证2. 不可变对象优化3. 对象生命周期追踪 运行结果验证 三、性能对比测试方法论量化数据…...

【Pandas】pandas DataFrame keys

Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签&#xff08;行标签和列标签&#…...

探索QEMU-KVM虚拟化:麒麟系统下传统与云镜像创建虚拟机的最佳实践

随着云计算和虚拟化技术的不断进步&#xff0c;虚拟化在管理服务器、隔离资源以及提升性能方面的好处越来越明显。麒麟操作系统Kylin OS是我们国家自己开发的操作系统&#xff0c;在政府机构和企业中用得很多。这篇文章会教你如何在麒麟操作系统上设置QEMU-KVM虚拟化环境&#…...

pycharm中调试功能讲解

一、调试前的准备工作​​ 1. 准备一段测试代码 先写一个简单的Python脚本&#xff08;比如计算阶乘&#xff09;&#xff0c;故意留点问题&#xff1a; def factorial(n):result 1for i in range(n):result * ireturn resultprint(factorial(5)) # 预期输出120&#xff0…...

SimpleITK (sitk) 中查看 DICOM 文件的像素位深(8位或16位)

在 SimpleITK (sitk) 中查看 DICOM 文件的像素位深&#xff08;8位或16位&#xff09;&#xff0c;可以通过以下方法实现&#xff1a; 方法一&#xff1a;通过 图像像素数组的数据类型 判断 读取 DICOM 文件&#xff1a; 使用 sitk.ReadImage() 加载文件&#xff0c;生成图像对…...

day28图像处理OpenCV

文章目录 一、图像预处理4 边缘填充4.1 边界复制&#xff08;BORDER_REPLICATE&#xff09;4.2 边界反射&#xff08;BORDER_REFLECT&#xff09;4.3 边界反射101&#xff08;BORDER_REFLECT_101&#xff09;4.4 边界常数&#xff08;BORDER_CONSTANT&#xff09;4.5 边界包裹&…...

【NLP】 自然语言处理笔记

NLP的全称是Natuarl Language Processing,中文意思是自然语言处理,是人工智能领域的一个重要方向。自然语言处理(NLP)就是在机器语言和人类语言之间沟通的桥梁,以实现人机交流的目的。 人类语言是抽象的信息符号,其中蕴含着丰富的语义信息,人类可以很轻松地理解其中的含…...

LaTeX 的pstricks-add宏绘图练习

练习。 \documentclass[10pt]{article} \usepackage{pstricks-add} \pagestyle{empty} \begin{document} \psset{xunit1.0cm,yunit1.0cm,algebraictrue,dimenmiddle,dotstyleo,dotsize5pt 0,linewidth2.pt,arrowsize3pt 2,arrowinset0.25} \begin{pspicture*}(-16.5581463…...

WITRAN_2DPSGMU_Encoder 类中,门机制

WITRAN_2DPSGMU_Encoder 类中的门机制详解 在 WITRAN_2DPSGMU_Encoder 类中&#xff0c;门机制是核心部分&#xff0c;类似于 LSTM 或 GRU 的门控机制&#xff0c;用于控制隐藏状态的更新和输出。以下是对门机制的详细解析。 1. 门机制的作用 门机制的主要作用是&#xff1a;…...

OSI参考模型和TCP/IP模型

1.OSI参考模型 OSI模型&#xff1a; OSI参考模型有7层&#xff0c;自下而上依次为物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;会话层&#xff0c;表示层&#xff0c;应用层。&#xff08;记忆口诀&#xff1a;物联网叔会用&#xff09;。低…...

3D版的VLA:从3D VLA、SpatialVLA到PointVLA——3D点云版的DexVLA,在动作专家中加入3D数据

前言 之前写这篇文章的时候&#xff0c;就想解读下3D VLA来着&#xff0c;但一直因为和团队并行开发具身项目&#xff0c;很多解读被各种延后 更是各种出差&#xff0c;比如从25年3月下旬至今&#xff0c;连续出差三轮&#xff0c;绕中国半圈&#xff0c;具身占八成 第一轮 …...

java: 需要‘)‘ java: 未结束的字符串文字,java: 不是语句,怎么解决

java: 需要’)’ IDE运行当中因为字符串中的JSON串&#xff0c;导致编码不对&#xff0c;IDEA编码识别错误&#xff0c;编译不过&#xff0c;程序运行不起来&#xff0c;解决办法。 第一步&#xff0c;进行修改编码进行尝试 第二步&#xff0c;继续修改编码...

HarmonyOS:使用Refresh组件实现页面下拉刷新上拉加载更多

一、前言 可以进行页面下拉操作并显示刷新动效的容器组件。 说明 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。该组件从API Version 12开始支持与垂直滚动的Swiper和Web的联动。当Swiper设置loop属性为true时&…...

HarmonyOS应用开发的工程目录结构

AppScope > app.json5 应用级的配置信息 AppScope > resources 这个目录下的base>element用于存放全局使用的基本元素&#xff0c;如字符串、颜色和布尔值。base>media目录则存储媒体、动画和布局等资源文件。如果模块下的resources的有同样的资源&#xff0c;那么…...

详解关于VS配置好Qt环境之后但无法打开ui界面

目录 找到Qt安装目录中designer.exe的路径 找到vs中的解决方案资源管理器 右键ui文件&#xff0c;找到打开方式 点击添加 然后把前面designer.exe的路径填到程序栏中&#xff0c;点击确定 然后设置为默认值&#xff0c;并点击确定 当在vs中配置好Qt环境之后&#xff0c;但…...

【JDBC-54.2】深入理解SQL注入攻击及JDBC防护方案

1. SQL注入攻击概述 SQL注入&#xff08;SQL Injection&#xff09;是当今Web应用程序中最常见、最危险的安全漏洞之一。它利用了应用程序对用户输入数据处理不当的缺陷&#xff0c;攻击者通过在输入字段中插入恶意的SQL代码片段&#xff0c;欺骗服务器执行非预期的SQL命令。 …...

PCDN通过个人路由器,用更靠近用户的节点来分发内容,从而达到更快地网络反应速度

PCDN&#xff08;P2P CDN&#xff09;的核心思想正是利用个人路由器、家庭宽带设备等分布式边缘节点&#xff0c;通过就近分发内容来降低延迟、提升网络响应速度&#xff0c;同时降低传统CDN的带宽成本。以下是其技术原理和优势的详细分析&#xff1a; 1. 为什么PCDN能更快&…...

【软件测试】bug 篇

本章思维导图&#xff1a; 1. 软件测试的生命周期 软件测试贯穿于整个软件的生命周期 流程阶段需求分析测试计划测试设计/开发测试执行测试评估上线运行维护具体工作内容1. 阅读需求文档 2. 标记可测试需求 3. 确定测试类型1. 制定测试范围 2. 选择测试工具 3. 分配资源1. 编写…...

java -jar指定类加载

在 Java 中&#xff0c;使用 java -jar 命令运行 JAR 文件时&#xff0c;默认会加载 JAR 文件的 MANIFEST.MF 文件中指定的 Main-Class。如果你想在运行时指定一个类来加载&#xff0c;可以通过以下方式实现&#xff1a; 方法 1&#xff1a;直接指定类路径和类名 如果你不想使用…...

MVC 模式深度解析与 Spring 框架实践研究

MVC 模式深度解析与 Spring 框架实践研究 摘要 MVC(Model-View-Controller)模式作为软件工程中最重要的架构模式之一,通过将应用逻辑划分为模型、视图和控制器三个独立组件,实现了代码的高内聚低耦合,显著提升了软件的可维护性和可扩展性。本文从 MVC 模式的核心思想出发…...

驱动开发硬核特训 · Day 11(下篇):从 virtio_blk 看虚拟总线驱动模型的真实落地

&#x1f50d; B站相应的视屏教程&#xff1a; &#x1f4cc; 内核&#xff1a;博文视频 - 总线驱动模型实战全解析 敬请关注&#xff0c;记得标为原始粉丝。 &#x1f527; 在上篇中&#xff0c;我们已经从理论视角分析了“虚拟总线驱动模型”在 Linux 驱动体系中的独特定位。…...

Java实现快速排序算法

用「整理书架」理解快速排序原理 想象你有一堆杂乱的书需要按大小排序&#xff0c;快速排序的步骤可以类比为&#xff1a; 1. 选一本“基准书”&#xff08;比如最右侧的书&#xff09; 2. 把书分成三堆&#xff1a; - 左边&#xff1a;比基准小的书 - 中间&#xff1a;基…...

3.3.2 应用层协议设计protobuf(二进制序列化协议)

文章目录 3.3.2 应用层协议设计protobuf&#xff08;二进制序列化协议&#xff09;1. 什么是协议设计什么是协议为什么说进程间通信就需要协议&#xff0c;而不是客户端与服务端之间为什么需要自己设计协议 2. 判断消息的完整性->区分消息的边界1.固定长度2. 特定符号3. 固定…...