# mars-chat **Repository Path**: Marsfactory/mars-chat ## Basic Information - **Project Name**: mars-chat - **Description**: Mars Chat万人聊天室系统 基于 Spring Boot 3 + WebSocket + Redis 构建的高并发群聊系统,支持万人同时在线聊天。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 4 - **Created**: 2025-09-11 - **Last Updated**: 2025-09-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MarsChat万人AI聊天室系统 基于 Spring Boot 3 + WebSocket + Redis 构建的高并发群聊系统,支持万人同时在线聊天。 ## 🚀 技术栈 - **后端**: Spring Boot 3.0.5、WebSocket、Redis、MyBatis-Flex - **数据库**: H2(开发)/ MySQL(生产) - **前端**: HTML5、CSS3、JavaScript、WebSocket - **消息队列**: Redis Pub/Sub - **构建工具**: Maven ## 🚀 在线体验 地址: https://marschat.ymbyte.com/ ## ✨ 核心特性 - 🌐 **万人同时在线**: 基于Redis发布订阅模式实现消息广播 - 📱 **响应式设计**: 支持PC端和移动端访问 - 🎨 **现代化UI**: 精美的聊天界面,支持表情包 - 🔄 **实时通信**: WebSocket双向通信,消息实时推送 - 🏗️ **分布式架构**: 支持集群部署,Redis实现跨节点消息共享 - 📊 **在线统计**: 实时显示在线用户数量 - 🔌 **自动重连**: 网络断开时自动重连机制 ## 🏃‍♂️ 快速开始 ### 环境要求 - JDK 17+ - Maven 3.6+ - Redis 6.0+(可选,项目内置Redis用于开发) ### 启动步骤 1. **克隆项目** ```bash git clone <项目地址> cd springboot-websocket-chat ``` 2. **启动应用** ```bash mvn spring-boot:run ``` 3. **访问聊天室** - 打开浏览器访问: http://localhost:8080 - 输入昵称或点击"随机生成" - 开始聊天! ### 多用户测试 1. 在不同浏览器窗口打开 http://localhost:8080 2. 使用不同昵称加入聊天室 3. 在任意窗口发送消息,其他窗口会实时接收 ## 🔧 配置说明 ### 数据库配置 **开发环境(H2内存数据库)** ```properties spring.datasource.url=jdbc:h2:mem:chatdb spring.datasource.driver-class-name=org.h2.Driver ``` **生产环境(MySQL)** ```properties # 取消注释以下配置 spring.datasource.url=jdbc:mysql://localhost:3306/chatdb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.username=root spring.datasource.password=123456 ``` ### Redis配置 ```properties # Redis连接配置 spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= spring.redis.database=0 ``` **注意**: 项目内置了嵌入式Redis用于开发测试,生产环境请使用独立的Redis服务。 ## 📊 系统架构 ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Client 1 │ │ Client 2 │ │ Client N │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ │ WebSocket │ │ │ │ ┌──▼──────────────────▼──────────────────▼──┐ │ Spring Boot Application │ │ ┌─────────────────────────────────────┐ │ │ │ WebSocket Handler │ │ │ └─────────────────────────────────────┘ │ │ ┌─────────────────────────────────────┐ │ │ │ Message Publisher │ │ │ └─────────────────────────────────────┘ │ └──────────────────┬────────────────────────┘ │ ┌──────▼──────┐ │ Redis │ │ Pub/Sub │ └─────────────┘ ``` ### 消息流程 1. 用户在前端发送消息 2. WebSocket接收消息并处理 3. 消息发布到Redis频道 4. Redis广播消息到所有订阅者 5. 所有连接的WebSocket客户端接收消息 6. 前端显示消息内容 ## 🌟 项目结构 ``` src/ ├── main/ │ ├── java/com/mars/chat/ │ │ ├── config/ # 配置类 │ │ │ ├── WebSocketConfig.java │ │ │ ├── RedisConfig.java │ │ │ └── EmbeddedRedisConfig.java │ │ ├── controller/ # 控制器 │ │ │ └── WebController.java │ │ ├── dto/ # 数据传输对象 │ │ │ └── WebSocketMessage.java │ │ ├── entity/ # 实体类 │ │ │ ├── User.java │ │ │ └── ChatMessage.java │ │ ├── handler/ # WebSocket处理器 │ │ │ └── ChatWebSocketHandler.java │ │ ├── service/ # 服务类 │ │ │ ├── ChatWebSocketService.java │ │ │ ├── RedisMessagePublisher.java │ │ │ └── RedisMessageSubscriber.java │ │ └── SpringbootWebsocketChatApplication.java │ └── resources/ │ ├── static/ # 静态资源 │ │ ├── css/chat.css │ │ ├── js/chat.js │ │ └── index.html │ ├── application.properties │ └── schema.sql └── test/ └── java/com/mars/chat/ └── SpringbootWebsocketChatApplicationTests.java ``` ## 🔍 核心组件说明 ### WebSocket处理器 - `ChatWebSocketHandler`: 处理WebSocket连接、消息接收和断开 - `ChatWebSocketService`: 管理WebSocket会话和消息广播 ### Redis服务 - `RedisMessagePublisher`: 发布消息到Redis频道 - `RedisMessageSubscriber`: 订阅Redis频道并广播到WebSocket客户端 ### 前端组件 - **响应式设计**: 适配PC和移动端 - **实时通信**: WebSocket双向通信 - **用户体验**: 消息动画、表情包、自动重连 ## 🚀 扩展部署 ### 集群部署 1. **启动多个应用实例** ```bash # 实例1 java -jar app.jar --server.port=8080 # 实例2 java -jar app.jar --server.port=8081 ``` 2. **配置负载均衡** ```nginx upstream chat_backend { server localhost:8080; server localhost:8081; } server { listen 80; location / { proxy_pass http://chat_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` 3. **Redis集群配置** ```properties # Redis集群配置 spring.redis.cluster.nodes=redis1:6379,redis2:6379,redis3:6379 ``` ### 性能优化 - **连接池配置**: 优化Redis连接池参数 - **消息批处理**: 批量处理消息提高吞吐量 - **缓存策略**: 缓存用户信息和热点数据 - **监控告警**: 集成监控系统,及时发现问题 ## 🧪 测试指南 ### 功能测试 1. **连接测试**: 打开多个浏览器窗口测试连接 2. **消息测试**: 发送各种类型消息(文本、表情) 3. **并发测试**: 同时多用户发送消息 4. **断线重连**: 断开网络后重新连接 ### 压力测试 使用WebSocket压测工具进行大量连接测试: ```bash # 安装artillery npm install -g artillery # 创建测试脚本 websocket-test.yml config: target: 'ws://localhost:8080' phases: - duration: 60 arrivalRate: 10 scenarios: - name: "WebSocket Chat Test" engine: ws # 运行测试 artillery run websocket-test.yml ``` ## 📝 开发说明 ### 添加新功能 1. **私聊功能**: 扩展消息类型,支持点对点消息 2. **文件传输**: 支持图片、文件上传分享 3. **聊天室分组**: 创建多个聊天频道 4. **用户权限**: 添加管理员、禁言等功能 5. **消息持久化**: 将聊天记录存储到数据库 ### 数据库扩展 如需使用MySQL,请先创建数据库: ```sql CREATE DATABASE chatdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 然后修改 `application.properties` 中的MySQL配置。 ## 📞 技术支持 - 🐛 **问题反馈**: 请提交Issue - 💡 **功能建议**: 欢迎提出改进建议 - 📧 **联系方式微信**: Mars3570 - 作者微信![image.jpg](image/image.jpg) ## 📄 许可证 MIT License - 详见 [LICENSE](LICENSE) 文件 --- **享受聊天的乐趣!** 🎉