# back-end **Repository Path**: qkd-simulator/back-end ## Basic Information - **Project Name**: back-end - **Description**: QKD simulator and more ... - **Primary Language**: Java - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-11-11 - **Last Updated**: 2026-01-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # QKD 仿真器 (QKD Simulator) QKDSim 是一个用于量子密钥分发(QKD)网络的事件驱动仿真器,重点用于研究分布式路由、链路故障、带宽分配和密钥生成等场景下的协议/算法行为。该项目包含: - 仿真引擎:事件驱动的 Hop-By-Hop 仿真引擎(`com.quantum.sim.engine`),支持动态路由、周期性调度、链路故障和快照。 - 后端 Web API:用于上传/管理拓扑、需求、算法文件(路由/调度),创建与执行仿真任务并持久化仿真结果(`com.quantum.web`)。 - 本地文件存储:上传文件保存在 `uploads/` 目录,SQL 脚本位于 `src/main/resources/sql/` 中,方便初始化数据库。 主要仓库结构(部分): - `src/main/java/com/quantum/sim`:仿真引擎、域模型、调度、路由、度量等 - `src/main/java/com/quantum/web`:控制器、Mapper、Service 和 API - `src/main/resources`:配置文件、SQL 初始化脚本 (`sql/`)、OpenAPI、静态文件等 - `uploads/`:运行时保存的文件(拓扑、需求、算法等) --- 快速开始 ---------- 以下示例以本地开发为例(假定你已经安装 JDK 17、Maven 和 MySQL): 1. 克隆仓库 ```powershell git clone https://gitee.com/qkd-simulator/back-end cd QKDSim ``` 2. 配置数据库(可以参照 [此文档:MySQL 部署.md](./MySQL%20部署.md)) - 在 MySQL 中创建数据库并设置字符集: ```sql CREATE DATABASE qkdsim_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` - 使用 `src/main/resources/sql/` 下的 SQL 文件按以下顺序初始化数据表: 1. `user.sql` 2. `algorithm-settings.sql` 3. `topology-demand.sql` 4. `simulation-task.sql` 5. `simulation-result.sql` 例: ```powershell mysql -u root -p qkdsim_db < src\main\resources\sql\user.sql mysql -u root -p qkdsim_db < src\main\resources\sql\algorithm-settings.sql mysql -u root -p qkdsim_db < src\main\resources\sql\topology-demand.sql mysql -u root -p qkdsim_db < src\main\resources\sql\simulation-task.sql mysql -u root -p qkdsim_db < src\main\resources\sql\simulation-result.sql ``` 3. 编辑配置文件 - 编辑 `application-.yml` 中的 `spring.datasource.url` 使其指向你的 MySQL 实例。 4. 构建并运行 ```powershell mvn -U -DskipTests package mvn spring-boot:run ``` 或直接使用 IDE(例如 IntelliJ IDEA)以 `QkdSimApplication#main` 启动。 5. 打开 Swagger UI(Knife4j)查看 API 文档 访问: http://localhost:8080/doc.html --- 数据库脚本(SQL) ------------------ 项目目录下 `src/main/resources/sql/` 有一系列用于建表的 SQL 文件: - `user.sql` — 创建 `app_user` 表以及初始数据脚本 - `algorithm-settings.sql` — 路由/调度算法映射表(存储文件路径) - `topology-demand.sql` — 拓扑与需求相关表 - `simulation-task.sql` — 仿真任务元数据表 - `simulation-result.sql` — 仿真结果持久化表 --- 开发与调试 ------------ - 语言/工具:JDK 17、Maven、MySQL、IntelliJ/VSCode。 - Lombok 需要 IDE 支持注解处理器,请确保启用。 - 热部署:`spring-boot-devtools` 已包含,修改后可自动重启(开发 profile)。 - 日志:默认写入 `logs/qkdsim.log`,日志级别在 `application.yml` 中可配置。 安全 & 配置 ------------- - 使用 `app.security.jwt.secret` 配置 JWT 密钥(在 `application.yml` 中),默认示例:`QKDSimSecretKey`。 - 请确保上传文件目录在 `.gitignore` 或 IDE 配置中被排除(工程默认在 `QKDSim.iml` 中排除了 `uploads`)。 注意事项 --------- - 所有上传文件将写入服务器上的 `uploads/` 目录,路径规则如下: - `uploads/topology//` — 存放拓扑 - `uploads/demands//` — 存放需求文件 - `uploads/route-schedule/users//alg-route` — 路由算法 - `uploads/route-schedule/users//alg-schedule` — 调度算法 - 在生产环境中,建议对 `uploads/` 目录使用对象存储或其他持久化方案,并增加更严格的权限控制。 - 默认 `spring.profiles.active` 为 `local`,切换到 `prod` 可加载 `application-prod.yml` 设置。 许可证 ------- MIT License