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

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

服务器功能设计

微服务思想应用 

微服务架构

主要组成分析

客户端

  • 客户端通过 HTTP 协议与网关进行交互,进行操作如用户注册、好友申请等
  • 客户端只需要知道网关的地址,无需关心后端服务的具体实现

网关

  • 作为系统的统一入口,网关负责接收客户端的请求并将其转发给具体的微服务。
  • 网关功能:
    1. 请求路由:将不同请求分发到对应的微服务。
    2. 权限校验:检查客户端的请求是否具备合法的认证信息。
    3. 协议转换:可以支持不同客户端的协议需求(如 HTTP 转 gRPC)。
    4. 聚合数据:将多个微服务的结果汇总返回给客户端。

注册中心

  • 注册中心用于服务的注册与发现。
  • 每个微服务启动时会向注册中心注册自己的信息(如服务名称、地址和端口),网关通过注册中心实现动态服务发现。
  • 作用:
    • 解决微服务实例的动态变化(如扩容、缩容、失败)问题。
    • 使网关能够找到具体的服务实例。

微服务

  • 根据功能划分成多个子服务
  • 服务之间通过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包管理工具&#xff0c;相较于npm和yarn&#xff0…...

C++初阶——简单实现list

目录 1、前言 2、List.h 3、Test.cpp 1、前言 1. 简单实现std::list&#xff0c;重点&#xff1a;迭代器&#xff0c;类模板&#xff0c;运算符重载。 2. 并不是&#xff0c;所有的类&#xff0c;都需要深拷贝&#xff0c;像迭代器类模板&#xff0c;只是用别的类的资源&am…...

C/C++后端开发面经

字节跳动 客户端开发 实习 一面(50min) 自我介绍是否愿意转语言,是否只愿意搞后端选一个项目来详细谈谈HTTP和HTTPS有什么区别?谈一下HTTPS加密的具体过程&#xff1a; 非对称加密 对称加密 证书认证的方式 非对称加密是为了保证对称密钥的安全性。 对称…...

linux 编辑器

1.三种模式 2.图例 3.wq 4.光标的使用...

【事件驱动框架OSAL】二.消息的管理机制

OSAL消息管理机制 二、消息管理机制2.1 消息的数据结构2.2 消息内存分配2.3 消息的接收和销毁2.3 源码链接地址 二、消息管理机制 在上一篇文中提到&#xff0c;系统消息事件&#xff08;SYS_EVENT_MSG&#xff09;用于任务间传递数据&#xff0c;而消息队列是这种机制的基础&…...

《论多源数据集成及应用》审题技巧 - 系统架构设计师

论多源数据集成及应用写作框架 一、考点概述 本论题“论多源数据集成及应用”主要考察的是计算机软件测试工程师在数据管理和集成方面的专业知识与实践能力。论题聚焦于信息爆炸时代企业、组织和个人所面临的数据挑战&#xff0c;特别是如何有效地收集、整理和清洗来自不同渠…...

【企业微信开发工具,获取位置】

微信开发者工具获取位置失败 报错原因解决方案 报错原因 getLocation:fail, the permission value is offline verifying解决方案 在开发工具栏输入链接&#xff0c;进行位置获取获取成功后&#xff0c;重新进入调用获取位置的页面即可如下图&#xff1a;...

HTML之JavaScript DOM编程获取元素的方式

HTML之JavaScript DOM编程获取元素的方式 1.获得document DOM树window.document(是window的属性)2.从document中获取要操作的元素1.直接获取var aaa document.getElementById("username") // 根据元素的id值获取页面上的唯一一个元素,有同名的则返回找到的第一个var…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...