基于 Spring Boot 和 WebSocket 的 Java 实时聊天室实战
这是一个采用前后端分离架构的轻量级 Web 聊天应用,核心目标是提供一个稳定、实时的消息通信平台。项目支持用户认证、好友管理以及一对一私聊功能,技术选型上主要依赖 Spring Boot 配合 WebSocket 实现双向持久连接。
核心特性
- 实时通信:基于 WebSocket 协议,确保消息秒级推送。
- 基础功能:涵盖用户注册登录、好友列表展示、私聊会话管理及历史记录查询。
- 后端架构:Spring Boot 2.7.6 快速构建 RESTful API,MyBatis 处理数据持久化。
- 前端交互:使用 HTML/CSS/JavaScript 结合 jQuery,保持轻量易维护。
系统架构与数据流
项目的核心在于 Spring Boot 与 WebSocket 的集成。我们采用经典的三层架构(Controller/Service/Dao),配合 WebSocket 的通信模型来处理并发连接。
通信流程解析
- 登录与会话建立:用户通过 HTTP
/login接口登录后,服务端返回必要的会话信息。 - WebSocket 握手:客户端发起 WebSocket 连接请求至
/WebSocketMessage端点。 - Session 绑定:服务器将当前用户的 ID 与对应的 WebSocket Session 进行绑定并存储,这是实现点对点推送的关键。
- 消息收发:当用户 A 发送消息时,服务端根据消息中的目标 ID 查找对应的 Session,并通过该通道实时推送给用户 B。
这种机制避免了传统轮询带来的资源浪费,保证了通信的低延迟和高效率。
项目结构概览
代码采用了清晰的模块化设计,便于后续维护和扩展:
java_chatroom/
├── src/
│ ├── main/
│ │ ├── java/com/example/java_chatroom/
│ │ │ ├── api/ # Controller 层
│ │ │ ├── component/ # 组件类
│ │ │ ├── config/ # 配置类
│ │ │ └── model/ # 数据模型
│ │ ├── resources/
│ │ │ ├── mapper/ # MyBatis XML 映射文件
│ │ │ └── static/ # 前端静态资源 (HTML/CSS/JS)
│ │ └── db.sql # 数据库初始化脚本
├── pom.xml # Maven 依赖配置
└── README.md # 项目说明文档
数据库设计
系统共设计了 5 个核心表来支撑用户关系和消息存储,逻辑清晰且易于扩展。
| 表名 | 描述 | 关键字段 | 关系说明 |
|---|---|---|---|
| user | 用户基本信息 | userId, username, password | 存储登录凭证 |
| friend | 好友关系 | userId, friendId | 记录好友关联 |
| message_session | 会话主表 | sessionId, lastTime | 私聊会话的唯一标识 |
| message_session_user | 会话成员 | sessionId, userId | 多对多关联,为群聊预留 |
| message | 消息内容 | messageId, fromId, sessionId, content, postTime | 具体的聊天记录 |
核心 API 与端点
功能主要通过 RESTful API 和 WebSocket 端点来实现。
认证与用户
POST /register:创建新用户。POST /login:校验身份并建立会话。GET /userInfo:获取当前登录用户详情。
社交与会话
GET /friendList:查看好友列表。GET /sessionList:列出所有进行中的私聊会话。POST /session:与指定好友创建新会话。
消息服务
GET /message:分页获取历史聊天记录。WebSocket /WebSocketMessage:核心实时通信通道。
环境准备与运行指南
在本地启动项目前,请确保满足以下环境要求:
- JDK:1.8 或更高版本
- MySQL:5.7 或更高版本
- Maven:3.6 或更高版本
部署步骤
-
数据库初始化 创建名为
java_chatroom的数据库,并执行src/main/resources/db.sql脚本初始化表结构。 -
配置连接 修改
src/main/resources/application.yml中的数据库连接信息,确保用户名和密码正确:spring: datasource: url: jdbc:mysql://127.0.0.1:3306/java_chatroom?useSSL=false&serverTimezone=UTC username: root password: your_password -
编译与启动 使用 Maven 命令进行构建和运行:
mvn clean install mvn spring-boot:run -
访问应用 浏览器打开
http://localhost:8080/login.html即可进入登录界面。
总结与展望
本项目完整实现了即时通讯的基础闭环,从用户鉴权到消息的实时透传都经过了验证。在实际开发中,可以进一步考虑引入 Redis 缓存热点数据以提升性能,或者扩展支持群聊、文件传输等功能。对于初学者而言,理解 WebSocket 的生命周期管理和 Session 绑定机制是掌握此类实时系统的重点。
开源地址:

