FCChat - 全功能实时聊天系统-演示站fcchat.xyz
augment不断片不脑残不失忆无限免费额度开发聊天应用
🚀 项目概述
FCChat 是一个功能完整的实时聊天系统,采用 Node.js + Socket.IO + MySQL 架构,支持多种聊天模式、文件传输、API登录集成等高级功能。
✨ 核心功能亮点
🔐 多重认证系统
- API登录集成:支持外部API服务器认证 (
https://fengchevip.online
) - 会话同步登录:支持跨设备会话同步
- 本地登录备用:API不可用时自动回退到本地认证
- 管理员权限控制:分级权限管理,管理员全局控制
- 记住登录凭据:可选择记住用户名密码
💬 多模式聊天
- 实名用户聊天:注册用户间的标准聊天
- 匿名聊天:临时聊天模式,支持链接分享
- 好友系统:添加/删除好友,好友列表管理
- 群组概念:支持多人聊天场景
📁 文件传输系统
- 拖拽上传:支持文件拖拽到聊天窗口
- 多格式支持:无限制文件格式和大小
- 临时存储:服务器端临时文件存储
- 下载功能:接收方可直接下载文件
🤖 智能自动回复
- HTML内容支持:富文本自动回复消息
- 匿名用户支持:对匿名用户也能自动回复
- 一次性投递:每个发送者只回复一次
- 离线用户支持:离线时也能触发自动回复
📱 实时状态同步
- 在线状态:实时显示用户在线/离线状态
- 消息状态:已读/未读状态指示器
- 多设备同步:同用户多窗口实时同步
- 连接状态:持久连接架构,类似WhatsApp
🎨 界面定制
- Hacker风格UI:黑客主题界面设计
- 数字雨背景:匿名聊天页面特效
- 响应式设计:适配移动设备和主流浏览器
- 主题定制:可自定义背景色、文字颜色
🔔 通知系统
- 声音通知:收到消息时播放提示音
- 桌面通知:浏览器原生通知支持
- 弹窗提醒:主窗口右上角消息提醒
- 未读消息指示:侧边栏未读消息计数
📊 管理员功能
- 全局API控制:管理员可全局启用/禁用API登录
- 系统配置管理:服务器端配置存储
- 用户权限管理:分级权限控制
- 操作审计日志:记录所有管理员操作
🏗️ 技术架构
后端技术栈
- Node.js: 服务器运行环境
- Express.js: Web框架
- Socket.IO: 实时通信
- MySQL: 数据库存储
- JWT: 用户认证
- Multer: 文件上传处理
前端技术栈
- 原生JavaScript: 核心逻辑
- Socket.IO Client: 实时通信客户端
- HTML5/CSS3: 界面构建
- 响应式设计: 移动端适配
数据库设计
- users: 用户信息表
- offline_messages: 离线消息表
- chat_history: 聊天历史表
- anonymous_chats: 匿名聊天表
- system_config: 系统配置表
🔧 配置说明
数据库配置
const DB_CONFIG = {
host: 'localhost',
user: 'xx',
password: 'xx',
database: 'xx',
charset: 'utf8mb4'
};
API登录配置
const API_CONFIG = {
enabled: true, // 管理员可控制
baseUrl: 'https://fengchevip.online',
endpoints: {
login: '/api/v1/auth/login',
checkPending: '/api/v1/session/check-pending',
syncSession: '/api/v1/session/sync',
profile: '/api/v1/auth/profile'
}
};
管理员用户配置
const ADMIN_USERS = ['admin', 'administrator', 'root'];
服务器配置
const SERVER_CONFIG = {
port: 3001,
host: '0.0.0.0',
staticPath: '/www/wwwroot/fcchatold/client/dist'
};
📦 部署指南
环境要求
- Node.js >= 14.0
- MySQL >= 5.7
- 操作系统: Linux/Windows
- 内存: >= 512MB
- 磁盘: >= 1GB
安装步骤
1. 克隆项目
git clone <repository-url>
cd fcchat
2. 安装依赖
# 服务器端依赖
cd server
npm install
# 如果有客户端依赖
cd ../client
npm install
3. 数据库配置
-- 创建数据库
CREATE DATABASE fcchat CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建用户
CREATE USER 'fcchat'@'localhost' IDENTIFIED BY '123123';
GRANT ALL PRIVILEGES ON fcchat.* TO 'fcchat'@'localhost';
FLUSH PRIVILEGES;
4. 启动服务
# 开发环境
cd server/dist
node index.js
# 生产环境 (推荐使用PM2)
pm2 start index.js --name "fcchat"
生产环境部署
使用PM2管理进程
# 安装PM2
npm install -g pm2
# 启动应用
pm2 start server/dist/index.js --name fcchat
# 设置开机自启
pm2 startup
pm2 save
Nginx反向代理配置
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
# Socket.IO支持
location /socket.io/ {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
🔒 安全配置
JWT密钥配置
const JWT_SECRET = 'your-super-secret-key-change-in-production';
CORS配置
app.use(cors({
origin: ['http://localhost:3001', 'https://your-domain.com'],
credentials: true
}));
文件上传安全
const upload = multer({
dest: 'uploads/',
limits: {
fileSize: 100 * 1024 * 1024 // 100MB限制
},
fileFilter: (req, file, cb) => {
// 文件类型验证
cb(null, true);
}
});
📈 性能优化
数据库优化
- 添加适当的索引
- 定期清理过期数据
- 连接池配置优化
内存管理
- 定期清理离线消息
- 文件上传临时清理
- Socket连接管理
缓存策略
- 静态文件缓存
- 用户状态缓存
- 配置信息缓存
🐛 故障排除
常见问题
1. 数据库连接失败
# 检查MySQL服务状态
systemctl status mysql
# 检查用户权限
mysql -u fcchat -p123123 -e "SHOW GRANTS;"
2. Socket.IO连接问题
# 检查端口占用
netstat -tulpn | grep 3001
# 检查防火墙设置
ufw status
3. 文件上传失败
# 检查uploads目录权限
ls -la uploads/
chmod 755 uploads/
📞 技术支持
日志查看
# PM2日志
pm2 logs fcchat
# 系统日志
tail -f /var/log/nginx/error.log
监控命令
# 查看进程状态
pm2 status
# 查看资源使用
pm2 monit
# 重启应用
pm2 restart fcchat
🎯 功能详细说明
🔐 API登录系统详解
登录优先级策略
- API直接登录: 使用外部API服务器认证
- 会话同步登录: 检查待同步会话并同步
- 本地登录备用: API不可用时使用本地数据库
API登录流程
// 1. 尝试API登录
const apiResult = await apiLogin(username, password);
// 2. 失败时尝试会话同步
if (!apiResult.success) {
const sessionResult = await sessionLogin(username);
}
// 3. 保存用户信息到本地数据库
await saveUserToLocalDB(username, password, userInfo);
管理员全局控制
- 权限验证: 只有管理员可修改API设置
- 全局生效: 配置变更对所有用户立即生效
- 实时同步: 每30秒自动同步服务器配置
- 操作审计: 记录所有配置变更操作
💬 聊天系统详解
消息类型支持
- 文本消息: 支持HTML富文本内容
- 文件消息: 支持任意格式文件传输
- 系统消息: 系统通知和状态消息
- 自动回复: 智能自动回复消息
- 匿名消息: 匿名用户发送的消息
消息状态管理
// 消息状态类型
const MESSAGE_STATUS = {
SENT: 'sent', // 已发送
DELIVERED: 'delivered', // 已送达
READ: 'read' // 已读
};
离线消息处理
- 存储期限: 离线消息保存7天
- 自动投递: 用户上线时自动投递
- 过期清理: 自动清理过期消息
- 投递确认: 投递成功后标记为已投递
📁 文件系统详解
文件上传流程
- 拖拽检测: 监听文件拖拽事件
- 文件验证: 检查文件大小和格式
- 上传处理: 使用FormData上传到服务器
- 临时存储: 服务器端临时文件存储
- 消息发送: 发送包含文件信息的消息
文件下载机制
// 文件下载处理
app.get('/api/files/:filename', (req, res) => {
const filePath = path.join(uploadsDir, req.params.filename);
res.download(filePath);
});
🤖 自动回复系统
触发条件
- 首次消息: 每个发送者只触发一次
- 用户在线: 支持在线和离线用户
- 匿名支持: 对匿名用户也能自动回复
- HTML支持: 支持富文本自动回复内容
配置管理
// 自动回复配置
const autoReplyConfig = {
enabled: true,
message: '<p>感谢您的消息,我会尽快回复!</p>',
oncePerSender: true,
supportAnonymous: true
};
📱 实时同步机制
WebSocket连接管理
- 持久连接: 类似WhatsApp的连接架构
- 自动重连: 连接断开时自动重连
- 心跳检测: 定期发送心跳包保持连接
- 多设备支持: 同用户多设备无缝同步
状态同步范围
- 在线状态: 用户上线/离线状态
- 消息状态: 消息已读/未读状态
- 配置同步: 系统配置变更同步
- 好友状态: 好友列表变更同步
🔧 高级配置
环境变量配置
# .env 文件
NODE_ENV=production
PORT=3001
DB_HOST=localhost
DB_USER=fcchat
DB_PASSWORD=123123
DB_NAME=fcchat
JWT_SECRET=your-jwt-secret
API_BASE_URL=https://fengchevip.online
UPLOAD_DIR=./uploads
MAX_FILE_SIZE=104857600
数据库连接池配置
const poolConfig = {
connectionLimit: 10,
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
acquireTimeout: 60000,
timeout: 60000,
reconnect: true
};
Socket.IO配置
const io = new Server(server, {
cors: {
origin: "*",
methods: ["GET", "POST"]
},
pingTimeout: 60000,
pingInterval: 25000,
upgradeTimeout: 30000,
maxHttpBufferSize: 1e8
});
📊 监控和日志
应用监控
// 健康检查端点
app.get('/api/health', (req, res) => {
res.json({
status: 'healthy',
timestamp: new Date().toISOString(),
uptime: process.uptime(),
memory: process.memoryUsage()
});
});
日志配置
// 日志级别配置
const LOG_LEVELS = {
ERROR: 0,
WARN: 1,
INFO: 2,
DEBUG: 3
};
// 日志输出格式
const logFormat = `[${timestamp}] ${level}: ${message}`;
性能指标
- 在线用户数: 实时在线用户统计
- 消息吞吐量: 每秒处理消息数量
- 数据库连接: 连接池使用情况
- 内存使用: 应用内存占用情况
🛡️ 安全最佳实践
输入验证
// 消息内容验证
const validateMessage = (content) => {
if (!content || content.length > 10000) {
throw new Error('消息内容无效');
}
return sanitizeHtml(content);
};
XSS防护
// HTML内容清理
const cleanHtml = (html) => {
return DOMPurify.sanitize(html, {
ALLOWED_TAGS: ['p', 'br', 'strong', 'em', 'a'],
ALLOWED_ATTR: ['href', 'target']
});
};
SQL注入防护
// 参数化查询
const query = 'SELECT * FROM users WHERE username = ?';
const results = await db.query(query, [username]);
🎯 未来规划
短期目标 (1-3个月)
- 移动端响应式优化
- 消息搜索功能
- 用户头像系统
- 群组聊天功能
中期目标 (3-6个月)
- 视频通话功能
- 屏幕共享
- 消息加密传输
- 多语言支持
长期目标 (6-12个月)
- 移动端APP开发
- 插件系统
- API接口开放
- 企业版功能
📞 技术支持和维护 https://xoxome.online
版本更新
# 检查更新
git pull origin main
# 重启服务
pm2 restart fcchat
# 数据库迁移
npm run migrate
备份策略
# 数据库备份
mysqldump -u fcchat -p123123 fcchat > backup_$(date +%Y%m%d).sql
# 文件备份
tar -czf uploads_backup_$(date +%Y%m%d).tar.gz uploads/
故障恢复
# 数据库恢复
mysql -u fcchat -p123123 fcchat < backup_20231210.sql
# 应用重启
pm2 restart fcchat
pm2 logs fcchat --lines 100
📚 API接口文档
认证相关接口
用户注册
POST /api/auth/register
Content-Type: application/json
{
"username": "testuser",
"password": "123456",
"fromAPI": false,
"apiUserInfo": {}
}
响应示例:
{
"success": true,
"user": {
"id": 1,
"username": "testuser",
"created_at": "2025-06-10T06:00:00.000Z"
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"message": "注册成功"
}
用户登录
POST /api/auth/login
Content-Type: application/json
{
"username": "testuser",
"password": "123456"
}
响应示例:
{
"success": true,
"user": {
"id": 1,
"username": "testuser"
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"message": "登录成功"
}
管理员接口
获取管理员列表
GET /api/admin/list
响应示例:
{
"success": true,
"admins": ["admin", "administrator", "root"],
"message": "管理员列表获取成功"
}
获取系统配置
GET /api/admin/config
响应示例:
{
"success": true,
"config": {
"apiLoginEnabled": true,
"lastModifiedBy": "admin",
"lastModifiedAt": "2025-06-10T06:00:00.000Z"
},
"message": "系统配置获取成功"
}
更新系统配置
POST /api/admin/config
Content-Type: application/json
{
"username": "admin",
"apiLoginEnabled": false
}
响应示例:
{
"success": true,
"message": "API登录已禁用",
"config": {
"apiLoginEnabled": false,
"lastModifiedBy": "admin",
"lastModifiedAt": "2025-06-10T06:00:00.000Z"
}
}
用户功能接口
获取好友列表
GET /api/friends/:username
响应示例:
{
"success": true,
"friends": ["friend1", "friend2"],
"message": "好友列表获取成功"
}
添加好友
POST /api/friends/add
Content-Type: application/json
{
"username": "currentuser",
"friendUsername": "newfriend"
}
删除好友
POST /api/friends/remove
Content-Type: application/json
{
"username": "currentuser",
"friendUsername": "oldfriend"
}
聊天功能接口
获取聊天设置
GET /api/chat/settings/:username
响应示例:
{
"success": true,
"settings": {
"backgroundColor": "#000000",
"textColor": "#ffffff"
},
"message": "聊天设置获取成功"
}
更新聊天设置
POST /api/chat/settings
Content-Type: application/json
{
"username": "testuser",
"backgroundColor": "#001122",
"textColor": "#ffffff"
}
获取自动回复设置
GET /api/auto-reply/:username
响应示例:
{
"success": true,
"settings": {
"enabled": true,
"message": "<p>自动回复消息</p>"
},
"message": "自动回复设置获取成功"
}
文件上传接口
文件上传
POST /api/upload
Content-Type: multipart/form-data
file: [文件数据]
响应示例:
{
"success": true,
"fileInfo": {
"filename": "uploaded_file.pdf",
"originalName": "document.pdf",
"size": 1024000,
"mimetype": "application/pdf",
"uploadTime": "2025-06-10T06:00:00.000Z"
},
"message": "文件上传成功"
}
文件下载
GET /api/files/:filename
匿名聊天接口
生成匿名聊天链接
POST /api/anonymous/generate-link
Content-Type: application/json
{
"username": "targetuser"
}
响应示例:
{
"success": true,
"linkId": "abc123def456",
"chatUrl": "http://localhost:3001/anonymous/abc123def456",
"message": "匿名聊天链接生成成功"
}
健康检查接口
系统健康状态
GET /api/health
响应示例:
{
"status": "healthy",
"timestamp": "2025-06-10T06:00:00.000Z",
"uptime": 3600,
"memory": {
"rss": 50331648,
"heapTotal": 20971520,
"heapUsed": 15728640
}
}
数据库健康检查
GET /api/admin/db-health
响应示例:
{
"healthy": true
}
🔌 Socket.IO事件文档
客户端发送事件
用户加入
socket.emit('join', {
username: 'testuser',
source: 'web'
});
发送消息
socket.emit('sendMessage', {
to: 'recipient',
content: 'Hello World!',
type: 'text',
fileInfo: null
});
消息已读
socket.emit('markAsRead', {
messageId: 'msg_123456',
from: 'sender'
});
服务器发送事件
接收消息
socket.on('receiveMessage', (data) => {
console.log('收到消息:', data);
// data 包含: from, content, type, timestamp, messageId 等
});
用户状态更新
socket.on('userStatusUpdate', (data) => {
console.log('用户状态:', data);
// data 包含: username, status, timestamp
});
在线用户列表
socket.on('onlineUsers', (users) => {
console.log('在线用户:', users);
});
开发团队: https://xoxome.online
最后更新: 2025年6月10日
版本: v2.1.1
许可证: MIT License
技术支持: 提供完整的API文档和WebSocket事件说明