首页 > 其他分享 >IM项目:进阶版即时通讯项目---项目总览

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

时间:2024-09-04 20:54:16浏览次数:14  
标签:协议 服务 进阶 项目 即时通讯 Http 总览

文章目录

写在前面

之前用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,直接调用其接口即可,在上面进行了一些二次的封装

标签:协议,服务,进阶,项目,即时通讯,Http,总览
From: https://blog.csdn.net/qq_73899585/article/details/141501007

相关文章

  • 『功能项目』骑乘坐骑【22】
    我们打开上一篇21项目优化的项目,本章要做的事情是在召唤坐骑后的指定距离内点击骑乘即可乘坐坐骑首先进入坐骑熊的预制体空间,将主角模型拖拽至坐骑身上并删除所有组件及标签将子物体Player拖拽至其子级,父类删掉将其Player隐藏创建坐骑的动画控制器MountBearAC创建......
  • 『功能项目』主角身旁召唤/隐藏坐骑【20】
    本章项目成果展示我们打开上一篇19坐骑UI搭建及脚本控制显/隐的项目,本章要做的事情是在坐骑UI界面点击召唤及隐藏坐骑的功能首先在外包中拖拽一个坐骑熊的预制体完全解压缩重命名为MountBear在资源文件夹Resources下的/预制体文件夹Prefabs下新建坐骑文件夹Mount......
  • 『功能项目』坐骑UI搭建及脚本控制显/隐【19】
    本章项目成果展示我们打开上一篇18怪物消亡掉落宝箱的项目,本章要做的事情是搭建一个坐骑UI界面,并通过键盘B键/右侧坐骑按钮控制坐骑UI界面的显示与隐藏在背包Bag上创建一个父物体,命名为Middle修改Bag的尺寸将下面资源图片放进Art文件夹将图片放在Art文......
  • C#简单计算机项目
    两数求和:      Console.WriteLine("请输入一个数:");      stringstr=Console.ReadLine();      intnumb=int.Parse(str);      Console.WriteLine("请再输入一个数:");      stringstri=Console.Rea......
  • 【为项目做准备】Linux网络编程重点知识(项目通用知识)
    Linux网络编程的简单梳理,不够再来更新~socket()setsockopt()bind()listen()accept()socket()socket()函数,用来创建套字节头文件:#include<sys/socket.h>函数:intsocket(intdomain,inttype,intprotocol)相应参数说明:-domain:指定套接字的地址族,常见的AF_INET......
  • 【Django开发】前后端分离django美多商城项目第9篇:收货地址,1. 展示收货地址界面【附
    本教程的知识点为:项目准备项目准备配置1.修改settings/dev.py文件中的路径信息2.INSTALLED_APPS3.数据库用户部分图片1.后端接口设计:视图原型2.具体视图实现用户部分使用Celery完成发送判断帐号是否存在1.判断用户名是否存在后端接口设计:用户部分JWT什......
  • 项目管理重点摘要【软考(软件设计师)】
    文章目录前言一、进度管理1.1进度管理的关键步骤1.2工具和方法1.3甘特图1.4关键路径分析法二、风险管理三、成本管理四、沟通管理前言一、进度管理1.1进度管理的关键步骤制定项目或生产计划:管理者需要根据项目或生产的目标、范围、资源等因素,制定出详细的项目或......
  • Nextjs项目中轻松添加深色和浅色主题支持
    在React或Next.js项目中实现深色和浅色主题的切换功能其实并不复杂。通过一些简单的步骤,就可以让用户在浏览网页时自由选择他们喜欢的显示模式,无论是经典的浅色主题还是更护眼的深色主题。下面我将介绍如何轻松添加这一功能。确保你已经在项目中使用了React或Next.js。如果你是初......
  • 国产化:springboot项目TongWeb替换tomcat踩坑实录
    前言全流程记录Tongweb替换Tomcat过程,最终实现为使用内嵌的Tongweb依赖替换SpringBoot默认的Tomcat,所以可直接从第5节开始看如何使用内嵌TongWeb替换Tomcat。1背景国产化浪潮下,项目要求实现web服务器的国产化,使用Tongweb替换Tomcat,商业版的Tongweb是单独启动的一个服务,需要......
  • opc da 服务器数据 转IEC61850项目案例
    目录1 案例说明 12 VFBOX网关工作原理 13 应用条件 24 查看OPCDA服务器的相关参数 25 配置网关采集opcda数据 46 用IEC61850协议转发数据 67 网关使用多个逻辑设备和逻辑节点的方法 98 在服务器上运行仰科OPCDA采集软件 109 案例总结 121 案例说明在OPCDA服务器上运行......