FilesLast commitLast update
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
README

算子开发效率平台 - 协作服务器

支持多用户实时协作的后端服务器。

功能特性

✨ 核心功能

  • 🔐 用户认证系统 - 会话管理和用户识别
  • 📡 实时协作 - WebSocket 支持多用户同步
  • 💾 数据持久化 - 服务器端数据存储
  • 🔌 RESTful API - 完整的 CRUD 操作
  • 📡 自动同步 - 数据变更实时推送

📦 支持的模块

  • 环境部署 - 一键配置开发环境
  • 学习共享 - 知识库和文档管理
  • 材料查询 - API 文档和问题解决方案

快速开始

1. 安装依赖

cd server
pip install -r requirements.txt

2. 启动服务器

python app.py

服务器将在 http://0.0.0.0:5000 启动。

3. 配置前端连接

在前端页面的 js/api.js 中修改 API 基础 URL:

const API_CONFIG = {
  baseURL: 'http://localhost:5000/api',  // 开发环境
  timeout: 30000,
  headers: {
    'Content-Type': 'application/json'
  }
};

API 接口文档

用户管理

POST /api/user/login

用户登录/创建会话

请求体:

{
  "username": "张三"
}

响应:

{
  "success": true,
  "sessionId": "abc123...",
  "user": {
    "username": "张三",
    "color": "#1a2b3c"
  }
}

GET /api/user/active

获取当前在线用户列表

响应:

{
  "users": [
    {
      "sessionId": "abc123...",
      "username": "张三",
      "color": "#1a2b3c"
    }
  ]
}

模块管理

GET /api/modules

获取所有模块

POST /api/modules

创建新模块(需要认证)

请求头:

X-Session-ID: <你的会话ID>

学习共享

GET /api/learning/categories

获取所有学习分类

POST /api/learning/categories

创建新分类

请求体:

{
  "name": "新分类",
  "icon": "📁",
  "parentId": 1  // 可选,如果提供则创建为子分类
}

PUT /api/learning/categories/{id}

更新分类

DELETE /api/learning/categories/{id}

删除分类

GET /api/learning/categories/{id}/items

获取分类下的文档列表

POST /api/learning/categories/{id}/items

创建新文档

请求体:

{
  "title": "文档标题",
  "desc": "文档描述",
  "wiki": "https://wiki.example.com/doc"
}

材料查询

GET /api/query/categories

获取所有查询分类

GET /api/query/search?q={keyword}

搜索查询内容

WebSocket 事件

连接事件

客户端 → 服务器

socket.emit('join', { room: 'learning' });
socket.emit('update_presence', { sessionId: 'xxx' });

服务器 → 客户端

// 连接成功
socket.on('connected', (data) => {
  console.log(data.message);
});

// 用户列表更新
socket.on('users_list', (data) => {
  updateOnlineUsers(data.users);
});

// 初始数据
socket.on('init_data', (data) => {
  if (data.type === 'learning') {
    renderCategories(data.data);
  }
});

// 数据更新
socket.on('learning_updated', (data) => {
  handleUpdate(data);  // { type, action, data/id }
});

// 模块更新
socket.on('modules_updated', (data) => {
  handleModuleUpdate(data);
});

数据存储

数据结构

server/data/
├── modules.json           # 模块配置
├── learningCategories.json # 学习共享数据
├── queryCategories.json   # 材料查询数据
└── deploymentHistory.json # 部署历史记录

数据格式

所有数据以 JSON 格式存储,包含完整的结构和所有用户创建的内容。

部署

开发环境

python app.py

生产环境

使用 Gunicorn 或 uWSGI:

pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:app

Docker 部署

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]

配置选项

在 app.py 中修改 Config 类:

class Config:
    SECRET_KEY = 'your-secret-key'  # 生产环境必须修改
    DATA_DIR = './data'           # 数据存储目录
    MAX_CONTENT_LENGTH = 16 * 1024 * 1024  # 最大上传 16MB

多用户协作流程

  1. 用户连接 → 创建会话,分配唯一颜色
  2. 加入房间 → 选择功能模块(学习/查询)
  3. 实时同步 → 任一用户修改数据,广播给所有在线用户
  4. 冲突解决 → 后写入策略,最后写入生效

安全说明

⚠️ 生产环境注意事项:

  1. 修改 SECRET_KEY

    SECRET_KEY = os.environ.get('SECRET_KEY', secrets.token_hex(32))
    
  2. 启用 HTTPS 配置反向代理(Nginx)处理 SSL

  3. 添加认证 实现真实的用户登录系统

  4. 限流 添加 API 请求频率限制

  5. 数据备份 定期备份 data/ 目录

故障排查

端口被占用

# 查找占用 5000 端口的进程
netstat -ano | findstr :5000

# 或修改端口
python app.py  # 修改 app.py 中的端口

CORS 问题

已在开发环境允许所有来源,生产环境需配置:

CORS(app, resources={r"/*": {"origins": "https://yourdomain.com"}})

WebSocket 连接失败

确认防火墙允许 WebSocket 连接,检查 socketio 版本兼容性。

性能优化

  • 使用 Redis 替代内存存储会话
  • 添加数据库(PostgreSQL/MongoDB)
  • 实现数据分页
  • 启用 gzip 压缩

许可证

MIT License

联系方式