IM项目:进阶版即时通讯项目---项目总览

2024-09-02 18:44

本文主要是介绍IM项目:进阶版即时通讯项目---项目总览,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 写在前面
  • 相关文档
  • 相关架构
    • 网关服务
    • 用户管理
    • 好友管理
    • 文件管理
    • 消息管理
    • 转发管理
    • 语音转换

写在前面

之前用Qt已经完成过一个即时通讯的项目,具体如下:

Qt项目:C++全栈聊天项目总结

在这个项目的引导下,接触到了如何使用grpc协议来进行RPC调用,之后又对于项目进行了一些其他的改造,主要的侧重点在于对于服务的分布式部署,然后服务和服务之间使用的就是这个rpc协议来进行调用

但是上一个项目并不完善,在很多部分都有可以优化的地方,比如服务注册,服务注册,在这个项目中,服务和服务并不知道对方的存在,只是从配置文件中进行简单的读取,然后根据读取出的ip地址和端口号来进行调用,后来随着学习,了解到了一些服务注册中心,例如Zookeeper,Ectd这些服务

因此做了这个新的项目,这个项目主要是对于上一个项目进行一个进阶的补充,也在一些地方进行优化,比如引入了elasticsearch进行更加高级的文档存储和搜索的服务器,以及ODB进行数据库对象的操作等。总的来说,这个项目比上一个项目更加规范,逻辑更加紧密

相关文档

由于项目比较大,将内容写在一篇博客并不现实,所以这里提供链接,对于相关模块感兴趣可以跳转到对应的博客查看,本篇主要进行一个整体架构的逻辑梳理,希望能迅速帮助读者理解项目的大体逻辑

IM项目:进阶版即时通讯项目—语音识别和验证码服务

IM项目:进阶版即时通讯项目—文件存储和消息转发

IM项目:进阶版即时通讯项目—消息存储

IM项目:进阶版即时通讯项目—用户管理(纯业务)

IM项目:进阶版即时通讯项目—好友管理和网关服务

相关架构

网关服务

作为网关,负责和客户端进行直接对接,并在鉴别权限之后,即可分发到对应的服务进行处理,接收到相应后,再返回给客户端,同时包含有用户身份验证的功能,避免被恶意请求所攻击,如果不带有这些字段,那么不予提供任何服务

那对应的提供又分成两种通信,分别是HTTP协议和WebSocket协议

  1. Http协议:传统的业务必然使用Http协议就可以,而实际上也有像这种httplib这样的,非常好用的http库,所以在项目中,绝大多数的服务都是借助Http来进行通信的,这样就能满足对应的接口了
  2. WebSocket协议:在聊天室项目中,也有一些服务是Http做不到的,需要服务器主动推送资源,而这对于Http协议来说是做不到的,即使在Http后续的优化中引入了主动推送部分资源的功能,但是也依旧不能满足需要。所以就引入了这个WebSocket协议

这也是和前面的项目的第一个不太一样的地方,在上一个项目中,并没有使用对应的WebSocket协议,而是直接基于TCP协议进行了一个自己程度的封装,因为TCP协议本身是一个全双工的协议,所以在Qt中直接使用一个TCP的长连接来对于消息的传输。而在这个项目中,直接使用WebSocket来进行服务,可以向客户端发送数据

网关服务基本就这些内容,下面主要说说网关服务背后的这些微服务的点

用户管理

用户管理服务,主要进行用户信息的各项操作,对比第一个版本的项目来说,这里不一样的点主要是多了一个短信验证服务,接入了阿里云的短信认证,可以发送短信,也多了更多的用户信息的修改,多了上传头像的功能,在之前的项目中,并没有对于头像的支持,因为没有含有对应的文件管理系统,所以头像这样的文件资源就没有进行一个合适的存储

好友管理

这个模块基本类似,含有获取列表,申请好友,处理请求,删除好友,用户搜索,获取聊天会话这些内容,和上个项目的改进主要体现在了引入了elasticsearch来进行模糊的搜索,elasticsearch也可以理解为是一个可以提供模糊搜索的数据库,在一些特殊的场景下搜索的效率是要比MySQL高的

文件管理

这是新加的模块,但其实也比较简单,就是一个单纯的文件的上传和下载,直接使用C++内部封装的文件流的读取和下载即可

消息管理

主要的功能是,获取历史消息和消息搜索

转发管理

借助RabbitMQ来完成转发服务,关于RabbitMQ在我的项目中也有介绍到,这里选该队列主要考虑到主题式的分发可能更加适合于当前的场景

语音转换

这里主要是借助的是百度云的SDK,直接调用其接口即可,在上面进行了一些二次的封装

这篇关于IM项目:进阶版即时通讯项目---项目总览的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130760

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程