Skip to content

基于Rust Tauri Java的一个WebSocket即时通讯聊天软件(开发中)

Notifications You must be signed in to change notification settings

Ryu2u/tauri-react-app

Repository files navigation

Tauri-React-App

一个基于Rust Tauri框架开发的一个即时通讯聊天软件

该项目仅作为Rust学习项目

前端使用Rust Tauri桌面框架,类似于Electron,但是体积没有那么大, 在Rust端处理WebSocket,http,加密解密,前端仅作为数据展示的功能,以便后续更换前端框架

后端服务器为Java SpringBoot + Netty,SpringBoot用来接收Http响应,Netty用于WebSocket连接

Cargo版本: cargo 1.76.0-nightly (6790a5127 2023-11-10)

React版本: ^18.2.38

Java版本: Java8

已开发的功能

  • 前端react页面的编写(一开始使用的前端框架为Angular,后来看着React不错,正好一起学学,把前端的代码使用React重构了下)
  • 取消Tauri默认的边框,使用前端自己实现一个窗口栏
  • 添加系统托盘
  • 改变系统托盘图标
  • Tauri 多窗口实现
  • 系统托盘闪烁并播放提示音功能
  • 后端服务器的搭建
  • WebSocket通信协议的实现,根据type来判断
  • ProtoBuf Java端和Rust端文件的生成,达成统一的序列化和反序列化
  • 后端数据库设计(目前为单mysql库,分表存储消息信息)
  • 结合Tauri 和Tokio,将main 改为异步
  • 使用tokio-tungstenite库作为Rust WebSocket库
  • 测试WebSocket是否能够和后端通信
  • 测试ProtoBuf 前端和后端的发送和接收,测试序列化和反序列化是否正常
  • 使用reqwest库作为Http发送端,前端仅作为接收数据和展示数据
  • 封装reqwest库的http get post 函数,并实现自定义的错误处理
  • 登录页面逻辑功能编写
  • 后端编写登陆接口
  • 登录接口使用Rsa非对称加密进行传输用户名和密码
  • Java端编写Rsa 工具类
  • 测试Java端Rsa 功能,编写测试
  • Rust端使用rsa库作为Rsa加密库
  • 查询文档,测试Rust rsa秘钥的生成、加密、解密
  • 测试登录请求,响应是否正常
  • Java端和Rust端身份验证使用jwt令牌的方式(本来的想法是将令牌存在cookie中,但是桌面端的webview无法使用cookie,暂时使用Rust state进行存储令牌,后期考虑适用sql进行存储)
  • 实现Rust端,错误的统一处理,若令牌失效则弹出提示框,并关闭所有窗口,返回登录界面
  • 聊天室的http获取,和前端的展示
  • 聊天室边框可拉伸
  • 聊天信息存储到数据库
  • 集成ORM框架 rbatis 使用sqlite 数据库存储用户信息
  • 在用户初次登录时,创建每个用户的sqlite文件,并执行初始化sql
  • rememberMe 功能实现
  • 界面自动滚动,强制滚动实现
  • 消息发送成功响应处理(根据id找到发送的消息,将loading变为false)
  • 获取消息后,减少未读消息的数量

未完成的功能

  • 文件的发送和接收
  • WebSocket 基本的通信和协议已经完成了,接下来的就是Rust将数据传输给前端,前端处理数据然后展示在界面中
  • 消息记录的缓存,暂时还没想好,基本考虑的是使用sqlite
  • 后端的消息队列
  • 使用对象存储来进行图片的传输,应该是直接在客户端进行上传,防止服务器带宽不足,正好之前买的对象存储也没怎么用
  • 后面全部完成了应该会考虑使用Rust将后端重构一遍

About

基于Rust Tauri Java的一个WebSocket即时通讯聊天软件(开发中)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published