项目背景
随着实时通信需求的增长,传统 HTTP 请求难以满足低延迟、高并发场景的需求。WebSocket 作为一种全双工通信协议,能够实现客户端与服务端的实时交互,广泛应用于在线应用、实时监控等领域。本项目旨在开发一个高效的 WebSocket 服务端,用于管理生产端、超管端和管理端客户端的连接,并通过连接池机制优化资源分配和任务调度。
项目目标
本项目通过构建一个基于 Java 的 WebSocket 服务端,实现以下目标:
实时通信:为生产端客户端提供低延迟的消息交互(如心跳检测、实例创建)。
连接池管理:动态维护一个包含最多 15 个空闲实例的连接池,确保资源高效利用。
权限控制:区分生产端(autoKey)、超管端(superKey)和管理端(xmgzs)客户端,提供不同的功能权限。
稳定性与可扩展性:通过调度器和超时机制,保障系统在高并发下的稳定性,同时支持未来功能扩展。
核心功能
客户端连接管理:
支持生产端(clientId: 1000)、超管端和管理端通过 WebSocket 连接服务端。
使用 token 验证客户端身份,防止非法连接。
超管客户端(superKey)仅注册连接,不接收消息;生产端客户端接收实时消息(如 start, text)。
连接池动态维护:
自动维护一个最大 15 个空闲实例的连接池,基于 SysDatapool 表存储实例状态。
支持实例创建(start)、删除(noPool)和超时清理(5分钟空闲超时,3分钟未登录超时)。
任务调度:
使用 ScheduledExecutorService 实现定期任务,包括:
检查空闲池大小,补充不足的实例。
清理超时未响应的 start 命令(60秒)。
关闭未登录的在线连接(3分钟)。
确保单一任务运行,防止调度冲突。
消息处理:
支持多种命令(如 heart, inspectPool, startOk, userLoginSuccess 等),实现心跳检测、池检查和用户登录管理。
客户端接收实时消息(如 "客户端成功连接服务器..."),支持实例状态更新。
技术栈:
后端框架:Spring Boot
通信协议:WebSocket(JSR 356)
核心语言:Java
数据存储:MySQL