软件功能(登录/注册、好友增删、群聊创建/加入、历史消息查
询)、
数据库设计(用户、好友、群组、私聊/群聊消息表)
WebSocket 实时通信、离线消息存储与拉取、
Redis 在线状态管理、管理员广播、前端界面与交互
1. 登录 / 注册
注册功能:用户提交用户名、密码、手机号 / 邮箱等信息,后端校验唯一性后写入user表,密码支持加密存储(如 BCrypt);注册成功后返回用户 ID,完成身份初始化。
登录功能:用户输入账号密码,后端验证通过后生成会话标识(如 JWT),同时将用户在线状态写入 Redis(ws:user:userId),前端存储会话信息并建立 WebSocket 长连接。
状态同步:登录 / 登出时,Redis 中在线状态实时更新,好友列表可感知对方在线 / 离线状态。
2. 好友增删管理
添加好友:用户发起好友申请,后端校验双方用户存在性后,在friend表中添加双向好友记录(userId+friendId),支持备注、分组功能。
删除好友:删除friend表中对应双向记录,同时清理该好友的相关会话缓存(可选);删除后双方好友列表实时刷新,无法再发送私聊消息。
好友列表查询:前端通过 REST API 拉取friend表中当前用户的所有好友记录,结合 Redis 在线状态展示 “在线 / 离线” 标识。
3. 群聊创建 / 加入
创建群组:用户(创建者)提交群名称、群简介等信息,后端在chat_group表插入群组记录,同时在group_user表添加创建者为群成员(标记role=admin)。
加入群组:支持 “邀请加入” 或 “申请加入” 模式:
邀请加入:群管理员通过用户 ID 添加成员,直接写入group_user表;
申请加入:普通用户提交申请,管理员审核通过后写入group_user表。
退出 / 移除群组:用户可主动退出群组(删除group_user记录),群管理员可移除成员,操作后群成员列表实时同步。
4. 历史消息查询
私聊历史:前端调用/chat/history/private接口,后端从chat_message表按userId+friendId查询消息记录,支持分页、按时间筛选。
群聊历史:调用/chat/history/group接口,从group_message表按groupId查询,返回群内所有成员的消息记录,同样支持分页。
离线消息拉取:用户登录时,后端查询数据库中该用户未读的离线消息(私聊 / 群聊),一次性推送给前端,标记为已读。
后端:Spring Boot + WebSocket(原生javax.websocket)+
MyBatis + MySQL + Redis
前端:Vue3 + Vite +Axios + Pinia
部署:云服务器+ Nginx 反向代理,公网可访问
4.1 后端实现(SpringBoot+WebSocket+MyBatis+Redis+MySQL)
项目搭建与配置基于 SpringBoot 搭建项目,引入 WebSocket、MyBatis-Plus、Redis、MySQL 依赖;在application.yml配置数据库连接、Redis 连接、服务端口 8080、自定义 WebSocket 端口 8082;创建RedisConfig配置类自定义 Redis 序列化规则,ServerEndpointExporter开启原生 WebSocket 注解支持。
用户模块开发编写 User 实体、Mapper、Controller,实现注册(用户名查重、密码入库)、登录接口;登录成功生成会话,Redis 写入ws:user:userId标记在线,同时前端建立 ws 长连接;退出登录删除 Redis 在线 key、关闭 WebSocket 会话。
好友管理模块friend 表 CRUD 接口,实现添加好友、删除好友、查询好友列表;查询好友时批量调取 Redis 在线状态,前端展示在线 / 离线标识;添加好友双向入库,删除同步清除两边好友数据。
群组模块开发chat_group(群组表)+group_user(成员表)双表关联;实现创建群组(创建人自动设为群主)、申请 / 邀请入群、退出群、移除成员;查询群列表、群成员接口由 axios 前端调用。
WebSocket 通信核心(WsServerEndpoint)
客户端:ws://ip:8082/ws/{userId}建立连接,服务端用 Map 保存 userId 和 Session 映射;
私聊:发送消息→判断接收方 Redis 在线状态,在线实时 ws 推送,离线存入 chat_message 离线字段;
群聊:根据 groupId 查询全部群成员,筛选在线用户批量推送消息,消息持久化 group_message;
定时心跳机制:前端周期性发送 heartbeat,超时未回复自动断开连接、删除 Redis 在线状态。
离线消息处理用户新登录建立 ws 连接后,后端自动查询私聊 chat_message、群聊 group_message 中未读离线消息,批量推送前端,推送完毕修改 is_offline=0 标记已读。
历史消息查询编写分页接口/chat/history/private、群消息接口,按用户 ID、好友 ID / 群组 ID 分页查询数据库历史聊天记录,下拉滚动动态加载。
管理员全局广播通过