ChatApp
带文字、图片、语音、视频消息和朋友圈的聊天软件。前后端全通,能注册登录、加好友、发消息、发朋友圈。
做了什么
- 账号:注册、登录、JWT 鉴权,密码 bcrypt 加密存储
- 好友:搜索用户、发送好友申请、同意 / 拒绝
- 消息:文字、图片、语音、视频四种消息类型,会话列表实时刷新
- 动态:朋友圈发布、点赞、评论
技术选型
| 层 | 用了什么 | 为什么 |
|---|---|---|
| 客户端 | Flutter + Dart | 一套代码跑 Android / iOS,省掉写两遍 |
| 状态 | Provider | 比 Riverpod 好上手,够用 |
| 网络 | Dio + WebSocket | 普通请求走 Dio,消息走长连接 |
| 服务端 | FastAPI + SQLAlchemy 2.0 | Python 写得快,异步天然支持 WebSocket |
| 数据库 | SQLite(本地)/ PostgreSQL(可切) | 开发用 SQLite 不折腾 |
| 鉴权 | JWT HS256,7 天有效期 | 无状态,省掉服务端 session |
踩过的坑
- WebSocket 断线重连:网络一断,客户端要能自己重连并把没发出去的消息补发,这块试了很久
- 图片 / 语音上传的大小和格式限制,前后端要各校验一次
- Flutter 里长列表滚动时的图片缓存,不注意就一路掉帧
还没搞懂
WebSocket 断线重连那部分基本是照抄的。能跑,但为什么这么写、换一种写法会怎样,我说不清楚。这是我下一步要回头补的地方。
现在到哪一步
功能齐了,但没部署,只在本机跑。上线前至少要处理:文件存储(现在存本地)、消息的持久化顺序、以及重连逻辑的可靠性。