我用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开源许可。

相关推荐
汪子熙1 分钟前
计算机世界里的 blob:从数据库 BLOB 到 Git、Web API 与云存储的二进制宇宙
后端
阿虎儿11 分钟前
React 引用(Ref)完全指南
前端·javascript·react.js
鞋尖的灰尘20 分钟前
springboot-事务
java·后端
元元的飞22 分钟前
6、Spring AI Alibaba MCP结合Nacos自动注册与发现
后端·ai编程
Cisyam24 分钟前
Go环境搭建实战:告别Java环境配置的复杂
后端
六月的雨在掘金31 分钟前
狼人杀法官版,EdgeOne 带你轻松上手狼人杀
前端·后端
绝无仅有36 分钟前
使用 Docker、Jenkins、Harbor 和 GitLab 构建 CI/CD 流水线
后端·面试·github
阿虎儿40 分钟前
React 事件类型完全指南:深入理解合成事件系统
前端·javascript·react.js
张同学的IT技术日记1 小时前
必看!用示例代码学 C++ 继承,快速掌握基础知识,高效提升编程能力
后端