【聊天室后端服务器开发】功能设计-框架与微服务
服务器功能设计

微服务思想应用
微服务架构
主要组成分析
客户端
- 客户端通过 HTTP 协议与网关进行交互,进行操作如用户注册、好友申请等
- 客户端只需要知道网关的地址,无需关心后端服务的具体实现
网关
- 作为系统的统一入口,网关负责接收客户端的请求并将其转发给具体的微服务。
- 网关功能:
- 请求路由:将不同请求分发到对应的微服务。
- 权限校验:检查客户端的请求是否具备合法的认证信息。
- 协议转换:可以支持不同客户端的协议需求(如 HTTP 转 gRPC)。
- 聚合数据:将多个微服务的结果汇总返回给客户端。
注册中心
- 注册中心用于服务的注册与发现。
- 每个微服务启动时会向注册中心注册自己的信息(如服务名称、地址和端口),网关通过注册中心实现动态服务发现。
- 作用:
- 解决微服务实例的动态变化(如扩容、缩容、失败)问题。
- 使网关能够找到具体的服务实例。
微服务
- 根据功能划分成多个子服务
- 服务之间通过RPC(远程调用)通信
微服务拆分

实现逻辑

后台服务逻辑汇总
入口网关自服务接口
【聊天室后端服务器开发】 入口网关开发-CSDN博客
- 客户端通信
- HTTP通信:客户端主动向服务端发送请求
- Websocket通信:服务器端主动向客户端进行推送
- 网关服务器
- 服务注册:子服务节点将自身注册到网关服务器上
- 服务发现:网关服务器根据客户端请求将客户端连接到指定的子服务模块上
- 子服务
- 子服务接收到业务请求后返回响应给网关服务器,然后网关服务将响应交给客户端
- 登录信息
- 登录成功后,用户子服务会通过Redis数据库验证一下该用户是否已经存在
- 客户端与服务端后续通信中,会先将会话ID与Redis数据库中存储的信息进行比对,如果比对成功再进行服务
- 主要功能就是判断用户是否已经成功登录

好友管理子服务
【聊天室后端服务器开发】 好友管理子服务测试-CSDN博客
【聊天室后端服务器开发】 好友管理子服务_后端好友互相关注怎么开发-CSDN博客
主要功能
- 好友管理服务:文章详细描述了如何设计和实现聊天应用中的好友管理功能。该功能包括用户之间的互相关注、好友请求的发送与接收、好友列表的管理等
- 请求管理:处理好友请求的模块,确保只有经过确认的请求才能成为好友,避免无效的或恶意的连接
- 关系管理:通过建立清晰的用户与好友关系模型,可以便捷地查询某个用户的好友列表以及相互关系状态
设计架构总结
通过设计合理的数据库索引,文章使得好友管理服务的查询效率大大提升,尤其是在面对大量用户时,能够保持快速响应。简化了用户与系统的交互流程,减少了不必要的步骤,提高了用户体验。程序设计考虑到未来可能需要添加新的社交功能,比如黑名单、群组管理等,具备良好的扩展性。
性能优化
- 异步处理:在请求的发送与接收过程中,采用了异步处理机制,避免了阻塞,提高了系统的响应速度
- 数据缓存:使用缓存技术加速了常用数据(如好友列表)的读取操作,减少了数据库的负担
消息存储子服务
【聊天室后端服务器开发】消息存储子服务测试-CSDN博客
【聊天室后端服务器开发】消息存储子服务_后端语音存储怎么设置-CSDN博客
主要功能总结
- 消息存储:支持将文本、图片、语音、文件等消息存储到MySQL、ES(Elasticsearch)以及文件存储系统中
- 消息检索:提供接口获取最近消息、指定时间段的消息,并支持根据关键字搜索消息内容
主要亮点总结
- MySQL和ES的结合:使用MySQL存储消息的元数据,ES用于快速搜索文本消息,提升查询效率
- 数据持久化:通过ODB框架与MySQL进行数据的持久化管理,确保数据的可靠存储
- 数据库操作封装:封装了数据库操作(如插入、删除、查询),使得操作更加简洁、安全
- 高效的检索:通过ES进行文本消息的关键字搜索,大大提升了查找效率
消息转发子服务
【聊天室后端服务器开发】消息转发子服务-CSDN博客
主要功能
- 服务注册与发现:通过服务注册模块将服务信息登记到服务中心,并通过服务发现模块获取可用服务
- 消息传递流程:客户端发送消息请求,服务处理后构建消息对象并通过消息队列(RabbitMQ)进行可靠的消息传递
- RPC服务:通过RPC接口进行客户端与服务端的通信,传递消息内容和请求
- 消息构建与存储:消息通过RPC请求获取,处理后存入数据库并通过消息队列转发
- 会话管理:文章通过MySQL数据库操作管理聊天会话成员,如增删查改成员信息
主要亮点
- 高效的消息转发:通过引入RabbitMQ作为消息队列,保证了消息的可靠转发
- 模块化与扩展性:消息传递、会话管理和RPC服务实现解耦,便于未来功能扩展
- 事务管理:使用数据库事务确保消息操作的原子性与一致性
用户管理子服务
【聊天室后端服务器开发】用户管理子服务_后端用户数据要全部redis操作吗-CSDN博客
【聊天室后端服务器开发】用户管理子服务测试_聊天服务器在线用户管理部门管理用户管理日志管理服务器关-CSDN博客
主要架构分析
- MySQL:用于存储用户的结构化数据,如用户信息和好友关系
- Redis:管理会话信息、登录状态、验证码等数据,提高系统响应速度
- Elasticsearch:索引和检索用户数据,提供高效的查询功能
主要功能
- 用户注册与管理:包括用户的注册、信息修改、登录验证等功能
- 数据存储与查询:通过ODB库进行MySQL数据库的操作,管理用户数据
- 会话与状态管理:使用Redis记录用户的登录状态与会话信息
主要亮点
- 多数据库系统结合使用:合理结合MySQL、Redis和Elasticsearch,充分发挥各自优势,提供高效的用户数据管理和查询
- 高效的数据访问和管理:使用ODB封装数据库操作,提高了代码的可维护性与数据操作的效率
- 模块化设计
文件存储子服务
【聊天室后端服务器开发】文件存储子服务_客户端后端文件服务器-CSDN博客

核心架构设计
- 文件上传:支持单个和多个文件上传,文件上传后生成唯一的ID,并将文件内容存储在指定路径
- 文件下载:支持单个和多个文件的下载,根据文件ID返回文件内容
- RPC服务:使用brpc框架搭建RPC服务,支持文件操作
- Protobuf:定义了文件上传和下载的数据结构,确保数据传输的高效和规范
- 服务注册与发现:通过etcd进行服务的注册和发现,确保其他服务或客户端可以调用文件服务
主要特点总结
- 文件操作的高效性:通过精确的文件ID和文件存储路径管理,保证了文件操作的高效性
- 模块化设计:文件上传与下载分别处理,便于扩展与维护
- 错误处理:实现了详细的错误返回机制,提高了服务的健壮性
语音转换子服务
【聊天室后端服务器开发】语音转换子服务-CSDN博客
主要架构
- Protobuf接口:定义了语音识别请求和响应的消息格式
- RPC服务:通过brpc框架搭建RPC服务,处理语音识别请求并返回结果
- ASRClient:用于实际的语音识别,调用外部平台进行处理
- SpeechRecognition方法:提取语音数据并通过ASRClient进行识别,返回识别结果或错误信息
亮点
- 模块化设计:清晰分离了语音识别的服务实现和RPC服务器管理,提高了代码的可维护性
- 灵活的服务构建:通过构建者模式,灵活配置和扩展语音识别服务
- 高效的语音识别:将语音内容转换为文本,增强了聊天系统的互动性
相关文章:
【聊天室后端服务器开发】功能设计-框架与微服务
服务器功能设计 微服务思想应用 微服务架构 主要组成分析 客户端 客户端通过 HTTP 协议与网关进行交互,进行操作如用户注册、好友申请等客户端只需要知道网关的地址,无需关心后端服务的具体实现 网关 作为系统的统一入口,网关负责接收客…...
国标28181协议在智联视频超融合平台中的接入方法
一. 国标28181介绍 国标 28181 协议全称是《安全防范视频监控联网系统信息传输、交换、控制技术要求》,是国内视频行业最重要的国家标准,目前有三个版本: 2011 年:推出 GB/T 28181-2011 版本,为安防行业的前端设备、平…...
让网页“浪“起来:打造会呼吸的波浪背景
每次打开那些让人眼前一亮的网页时,你是否有注意到那些看似随波逐流的动态背景?今天咱们不聊高深的技术,就用最朴素的CSS,来解锁这个让页面瞬间鲜活的秘籍。无需JavaScript,不用复杂框架,准备好一杯咖啡&am…...
linux-多进程基础(1) 程序、进程、多道程序、并发与并行、进程相关命令,fork
程序是什么 程序是包含一系列信息的文件。这些信息描述了如何在运行时创建一个进程,包含二进制格式标识、机器语言指令、程序入口地址、数据、符号表及重定位表、共享库信息及其他信息 二进制格式标识,每个程序包含了描述可执行文件的元信息(是否可读之…...
美颜相机1.0
项目开发步骤 1 界面开发 美颜相机界面构成: 标题 尺寸 关闭方式 位置 可视化 2 创建主函数调用界面方法 3 添加两个面板 一个是按钮面板一个是图片面板 用JPanel 4 添加按钮到按钮面吧【注意:此时要用初始化按钮面板的方法initBtnPanel 并且将按钮添…...
Docker内存芭蕾:优雅调整容器内存的极限艺术
title: “💾 Docker内存芭蕾:优雅调整容器内存的极限艺术” author: “Cjs” date: “2025-2-23” emoji: “🩰💥📊” 当你的容器变成内存吸血鬼时… 🚀 完美内存编排示范 📜 智能内存管家脚本…...
gitlab初次登录为什么登不上去
今天又写了一次gitlab安装后,第一次登录的问题。 gitlab工作笔记_gitlab默认用户名密码-CSDN博客 因为又掉这个坑里了。 # 为什么第一次登录这么难? 第一是因为gitlab启动的时间很长,有时候以为装错了。 第二是初始密码,如果…...
单链表相关操作(基于C语言)
文章目录 单链表定义版本一(可自己选择是否含头节点)创建单链表打印单链表对单链表进行冒泡排序删除单链表中值为key的节点求单链表表长在单链表位序为i的位置插入新元素e 单链表定义 typedef struct node {int data;struct node* next; }LinkNode,*LinkList;版本一(可自己选择…...
SPRING10_SPRING的生命周期流程图
经过前面使用三大后置处理器BeanPostProcessor、BeanFactoryPostProcessor、InitializingBean对创建Bean流程中的干扰,梳理出SPRING的生命周期流程图如下...
从零到一学习c++(基础篇--筑基期十一-类)
从零到一学习C(基础篇) 作者:羡鱼肘子 温馨提示1:本篇是记录我的学习经历,会有不少片面的认知,万分期待您的指正。 温馨提示2:本篇会尽量用更加通俗的语言介绍c的基础,用通俗的语言去…...
Java String 类
Java String 类常用方法详解 在 Java 编程里,字符串操作十分常见,而 String 类作为 Java 标准库的核心类,用于表示不可变的字符序列。任何对字符串的修改操作都会返回一个新的字符串对象,不会改变原始字符串。本文将详细介绍 Str…...
P8665 [蓝桥杯 2018 省 A] 航班时间
P8665 [蓝桥杯 2018 省 A] 航班时间 题目代码分析 题目 代码 #include <iostream> #include <vector> #include <string> #include <algorithm> #include <math.h> #include <queue>#include <cctype> using namespace std; int t;…...
Vue3项目与pnpm使用教程
文章目录 Vue3项目与pnpm使用教程一、pnpm简介二、安装pnpm三、创建Vue3项目四、运行Vue3项目五、管理项目依赖六、配置pnpm七、使用pnpm的额外功能八、总结 Vue3项目与pnpm使用教程 一、pnpm简介 pnpm是一个高性能的Node.js包管理工具,相较于npm和yarn࿰…...
C++初阶——简单实现list
目录 1、前言 2、List.h 3、Test.cpp 1、前言 1. 简单实现std::list,重点:迭代器,类模板,运算符重载。 2. 并不是,所有的类,都需要深拷贝,像迭代器类模板,只是用别的类的资源&am…...
C/C++后端开发面经
字节跳动 客户端开发 实习 一面(50min) 自我介绍是否愿意转语言,是否只愿意搞后端选一个项目来详细谈谈HTTP和HTTPS有什么区别?谈一下HTTPS加密的具体过程: 非对称加密 对称加密 证书认证的方式 非对称加密是为了保证对称密钥的安全性。 对称…...
linux 编辑器
1.三种模式 2.图例 3.wq 4.光标的使用...
【事件驱动框架OSAL】二.消息的管理机制
OSAL消息管理机制 二、消息管理机制2.1 消息的数据结构2.2 消息内存分配2.3 消息的接收和销毁2.3 源码链接地址 二、消息管理机制 在上一篇文中提到,系统消息事件(SYS_EVENT_MSG)用于任务间传递数据,而消息队列是这种机制的基础&…...
《论多源数据集成及应用》审题技巧 - 系统架构设计师
论多源数据集成及应用写作框架 一、考点概述 本论题“论多源数据集成及应用”主要考察的是计算机软件测试工程师在数据管理和集成方面的专业知识与实践能力。论题聚焦于信息爆炸时代企业、组织和个人所面临的数据挑战,特别是如何有效地收集、整理和清洗来自不同渠…...
【企业微信开发工具,获取位置】
微信开发者工具获取位置失败 报错原因解决方案 报错原因 getLocation:fail, the permission value is offline verifying解决方案 在开发工具栏输入链接,进行位置获取获取成功后,重新进入调用获取位置的页面即可如下图:...
HTML之JavaScript DOM编程获取元素的方式
HTML之JavaScript DOM编程获取元素的方式 1.获得document DOM树window.document(是window的属性)2.从document中获取要操作的元素1.直接获取var aaa document.getElementById("username") // 根据元素的id值获取页面上的唯一一个元素,有同名的则返回找到的第一个var…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
