SpringBoot + MySQL + WebSocket 在线客服系统(坐席分配+聊天记录持久化)
下面给你一套毕设/课设通用、逻辑完整、老师爱问、答辩不翻车的方案:
《基于 SpringBoot + MySQL + WebSocket 的在线客服系统(坐席分配 + 聊天记录持久化)》
这套方案的亮点是:
✅ WebSocket 实时通信
✅ 坐席自动分配算法
✅ 聊天记录落库
✅ 并发 & 会话管理清晰
非常适合作为 Java Web / SpringBoot 课程设计或本科毕设。

一、选题背景(论文可直接用)
随着互联网服务的发展,企业对在线客服系统的需求日益增长。传统客服系统存在以下问题:
-
依赖轮询,实时性差、资源消耗大
-
坐席分配不合理,导致用户等待时间长
-
聊天记录未持久化,难以追溯与质检
-
缺乏并发会话管理能力
本系统基于 SpringBoot + WebSocket + MySQL,实现了用户与客服之间的实时通信、坐席智能分配及聊天记录持久化,提升了客服效率和用户体验。
二、技术架构
浏览器(JS WebSocket)
↓
SpringBoot WebSocket
├── WebSocketHandler(消息处理)
├── SessionManager(会话管理)
├── AgentDispatcher(坐席分配)
├── Service(业务层)
├── Mapper(MyBatis)
↓
MySQL(用户、坐席、消息)
|
技术 |
作用 |
|---|---|
|
SpringBoot |
快速开发 |
|
WebSocket |
全双工实时通信 |
|
MyBatis |
ORM |
|
MySQL |
数据持久化 |
|
Jackson |
JSON 序列化 |
|
Thymeleaf / Vue |
前端展示 |
三、系统角色
1️⃣ 用户(访客)
-
发起会话
-
发送/接收消息
-
查看历史记录
2️⃣ 客服坐席
-
接收系统分配的会话
-
同时处理多个会话
-
回复用户消息
3️⃣ 管理员
-
坐席管理
-
会话监控
-
聊天记录查询
四、核心业务流程(答辩必画)
用户发起连接
↓
WebSocket 建立连接
↓
系统分配空闲坐席
↓
绑定会话(用户 ↔ 坐席)
↓
双方实时聊天
↓
消息落库
↓
会话结束 / 超时关闭
五、数据库设计(核心表)
1️⃣ 用户表 user
CREATE TABLE user (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
type INT COMMENT '1-用户 2-客服'
);
2️⃣ 客服坐席表 agent
CREATE TABLE agent (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT,
max_session INT DEFAULT 5,
current_session INT DEFAULT 0,
status INT DEFAULT 1 COMMENT '1-在线 0-离线'
);
3️⃣ 会话表 chat_session
CREATE TABLE chat_session (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT,
agent_id BIGINT,
start_time DATETIME,
end_time DATETIME,
status INT COMMENT '1-进行中 2-已结束'
);
4️⃣ 聊天记录表 chat_message(⭐核心)
CREATE TABLE chat_message (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
session_id BIGINT,
sender_id BIGINT,
receiver_id BIGINT,
content TEXT,
send_time DATETIME,
is_read TINYINT DEFAULT 0
);
六、WebSocket 核心实现
1️⃣ WebSocket 配置
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(chatWebSocketHandler(), "/ws/chat")
.setAllowedOrigins("*");
}
@Bean
public WebSocketHandler chatWebSocketHandler() {
return new ChatWebSocketHandler();
}
}
2️⃣ WebSocket 处理器(核心)
@Component
public class ChatWebSocketHandler extends TextWebSocketHandler {
@Autowired
private SessionManager sessionManager;
@Autowired
private AgentDispatcher agentDispatcher;
@Override
public void afterConnectionEstablished(WebSocketSession session) {
Long userId = getUserId(session);
sessionManager.putUserSession(userId, session);
// 用户连接后分配坐席
Long agentId = agentDispatcher.dispatch();
sessionManager.bindSession(userId, agentId);
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) {
ChatMsg msg = JSON.parseObject(message.getPayload(), ChatMsg.class);
chatService.saveAndSend(msg);
}
}
七、坐席分配算法(⭐ 创新点)
最少连接数分配(推荐)
@Service
public class AgentDispatcher {
public Long dispatch() {
return agentMapper.selectLeastLoadedAgent();
}
}
SELECT id
FROM agent
WHERE status = 1
AND current_session < max_session
ORDER BY current_session ASC
LIMIT 1;
📌 老师常问:为什么不用轮询?
✅ 答:轮询可能导致部分坐席过载,最少连接数更均衡。
八、聊天记录持久化
@Service
public class ChatService {
@Transactional
public void saveAndSend(ChatMsg msg) {
// 1. 落库
chatMessageMapper.insert(msg);
// 2. 推送
WebSocketSession session =
sessionManager.getSession(msg.getReceiverId());
if (session != null && session.isOpen()) {
session.sendMessage(
new TextMessage(JSON.toJSONString(msg))
);
}
}
}
九、会话管理(关键)
@Component
public class SessionManager {
private final Map<Long, WebSocketSession> userSessions = new ConcurrentHashMap<>();
public void putUserSession(Long userId, WebSocketSession session) {
userSessions.put(userId, session);
}
public WebSocketSession getSession(Long userId) {
return userSessions.get(userId);
}
}
✅ 使用 ConcurrentHashMap保证线程安全
十、前端 WebSocket 示例
const socket = new WebSocket("ws://localhost:8080/ws/chat");
socket.onopen = () => {
socket.send(JSON.stringify({
senderId: 1,
receiverId: 2,
content: "你好,客服"
}));
};
socket.onmessage = (event) => {
console.log("收到消息:" + event.data);
};
十一、系统特色(答辩亮点)
✅ WebSocket 全双工实时通信
✅ 坐席负载均衡分配算法
✅ 聊天记录持久化 & 可追溯
✅ 并发会话管理(线程安全)
✅ 可扩展为分布式 / 微服务
✅ 可接入 AI 客服 / 机器人
十二、论文结构建议
|
章节 |
内容 |
|---|---|
|
第1章 |
绪论 |
|
第2章 |
相关技术(WebSocket、SpringBoot) |
|
第3章 |
需求分析 |
|
第4章 |
系统设计(架构、E-R图、时序图) |
|
第5章 |
系统实现(连接、分配、存储) |
|
第6章 |
系统测试 |
|
第7章 |
总结与展望 |
十三、可扩展方向(体现工作量)
✅ 消息已读未读
✅ 客服排队机制
✅ 聊天记录检索(ES)
✅ 文件/图片消息
✅ 分布式 WebSocket(Redis + STOMP)
✅ 接入大模型客服机器人
更多推荐
所有评论(0)