我用Rust做了一个QQ

项目链接:

github.com/SuanCaiYv/p...

概述

使用纯Rust实现的即时通讯系统。

  • 服务端:Rust
  • 后端:Rust
  • 客户端:Rust+TS

关于客户端,原本钦定了Electron+Vue3,后面看到Tauri(一个使用Rust实现的类似Electron的跨平台框架);考虑到和服务端契合度以及代码可复用(偷懒了属于是),所以切换到了这里。

依赖

  • Database:PostGreSQL
  • NoSQL:Redis
  • Web: Salvo
  • RPC: Tonic
  • HttpClient: Reqwest
  • Core: QUIC
  • Runtime: Tokio+Monoio

效果

登录注册

主页面

添加好友

消息

好友列表

快速开始

环境依赖

此项目仅可以在Linux和MacOS运行,原因在于依赖的部分package无法在Windows使用,如果您想要在Windows尝试,可以使用Docker一键部署。

  • Rust环境
  • Yarn
  • Postgresql
  • Redis
  • Kafka

裸运行

  • 执行server/redis-cluster/cmd.sh即可,如果出现报错可重试,一般即可启动一个三节点的Cluster模式的Redis集群。
  • 执行server/kafka-cluster/cmd.sh即可,如果出现no such file or directory,手动复制粘贴指令即可,同时第一次运行请注释掉初始化目录的命令用以初始化log文件夹。
  • 进入你的PostgreSql,创建一个新的用户,制定密码,给予其创建删除database的权限,然后使用此用户登录,执行server/apt/init.sql即可。上述操作可通过PgAdmin图形界面完成,或通过DataGrip完成。
  • 执行server/cert/tls.sh,生成开发证书,这里你需要输入参数localhost指出证书的域名且表示这仅用在本地开发。

至此,你已拥有了基本的运行环境。

配置文件

更改:

  • api
  • message
  • scheduler
  • seqnum

之下的config-example.toml名称为config.toml并更改里面对应的配置即可,一般为数据库,Redis,Kafka,证书文件地址。

你可能会注意到这里还有msgprocessor项目,并且它没有配置文件,此项目还在开发中,它会作为消息处理下游服务,执行持久化,推送系统接入等操作,但不影响目前本地启动。

客户端配置

类似服务端配置,处理证书文件位置即可,这里需要注意的是,如果选用打包运行,需要反注释掉main.rs中载入资源文件的代码。

额外的注意事项

seqnummsglogger使用了monoio作为运行时,因此需要使用nightly版本,随着后续GAT的稳定,此要求将被取消。

Docker运行

根据系统架构,选择aarch64/amd64执行docker-compose-aarch64/amd64.yaml即可。

compose会自动拉起一个kafka,一个redis集群,一个postgresql以及对应的四个模块(msglogger嵌套在message中运行)。

系统架构

细节实现

客户端实现

待办

因为时间和精力因素,部分功能还在开发中,且对应API已开发完毕,等待客户端整合,这些功能包括但不限于:

  • 发送文件,表情,图片,视频,音频
  • 消息数据库持久化(为了快速开发目前仅存储在开启了持久化的Redis中)
  • HTTP3开启
  • 客户端消息乱序,丢失监测机制

联系方式

如果你对此项目感兴趣,或许想要了解详细的实现(因为时间和精力,文档会有所欠缺)。可以通过以下方式联系我:

本项目遵循MIT开源许可。

相关推荐
Cacciatore->18 分钟前
React 基本介绍与项目创建
前端·react.js·arcgis
摸鱼仙人~20 分钟前
React Ref 指南:原理、实现与实践
前端·javascript·react.js
Java技术小馆28 分钟前
GitDiagram如何让你的GitHub项目可视化
java·后端·面试
贵沫末40 分钟前
React——基础
前端·react.js·前端框架
星星电灯猴1 小时前
iOS 性能调试全流程:从 Demo 到产品化的小团队实战经验
后端
爱学习的茄子1 小时前
AI驱动的单词学习应用:从图片识别到语音合成的完整实现
前端·深度学习·react.js
程序无bug1 小时前
手写Spring框架
java·后端
JohnYan1 小时前
模板+数据的文档生成技术方案设计和实现
javascript·后端·架构
全干engineer1 小时前
Spring Boot 实现主表+明细表 Excel 导出(EasyPOI 实战)
java·spring boot·后端·excel·easypoi·excel导出
Da_秀1 小时前
软件工程中耦合度
开发语言·后端·架构·软件工程