今天的资料我收到了。
即时通讯 · uni-app · Node.js · Socket.IO
让消息抵达,像对话一样自然。
SyncTalk 将移动端聊天界面、好友与群组关系、图片语音视频消息、Redis 断线恢复和 ACK 确认机制整合在一起, 打造一个完整的即时通讯项目。
周同学
2
前端协作群
[视频] 组件演示已发送
林同学
语音 12s
断线后重连,消息会从游标继续恢复。
收到 ACK 后再推进恢复状态。
▶
视频消息
上传完成后自动投递
输入消息
为什么是 SyncTalk
不只是界面,还是一整条消息链路。
Socket.IO 连接在线用户,消息即时推送。
好友申请、联系人搜索、备注、拉群和入群申请。
文字、图片、语音、视频,保留上传进度与失败重试。
Redis 记录失败游标,重连后逐条恢复未收到消息。
可靠投递
离线不可怕,关键是恢复点要清楚。
推送失败
接收方离线或 ACK 超时,服务端记录最早失败消息 ID。
冻结游标
恢复开始时将 sync 游标转入 frozen,避免恢复中途被新失败覆盖。
逐条发送
每条恢复消息独立触发 message 事件,并等待客户端 ACK。
失败续传
某条恢复失败时,游标推进到失败消息 ID,下次从这里继续。
技术结构
前端轻巧,后端明确,状态有据可循。
客户端
uni-app + Vue 3,覆盖登录、聊天、联系人、群组、个人资料和缓存管理。
- 聊天 / 联系人 / 我的三栏主导航
- 语音录制、图片选择、视频上传
- 发送失败重试和本地媒体缓存
服务端
Express + Socket.IO + MySQL + Redis,负责认证、关系、消息和恢复。
- JWT 鉴权与微信登录入口
- 好友、群聊、会话、消息 REST API
- Socket ACK 与 Redis 恢复游标
文件能力
通过临时密钥支持图片、音频、视频上传,让聊天内容不止停留在文本。
- 上传进度展示
- 失败状态保留
- 视频继续上传
使用场景
从学习协作到项目沟通,消息都在同一个地方。
同学协作
创建群聊、邀请成员、发送资料、语音沟通,把项目讨论沉淀在会话里。
移动聊天
适配小程序和移动端习惯,首屏聚焦消息列表,底部导航清晰直接。
服务端实践
把数据库事务、Socket 推送、离线恢复、文件上传串成完整后端业务。
更多信息
常见问题
SyncTalk 现在支持哪些消息类型?
服务端消息模型支持 text、image、file、audio、video,客户端聊天页已经覆盖文本、图片、语音和视频交互。
离线消息是整批发送还是逐条发送?
恢复时按消息逐条发送,每条消息等待一次 ACK。失败时记录失败消息 ID,下次从失败点继续。
官网为什么放在 static 目录?
后端已经通过 Express 暴露 static 静态目录,启动服务后可以直接访问根路径查看官网。