XNSim/XNSimPortal/doc/仿真运行模块设计文档.md
2025-07-25 13:42:20 +08:00

229 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 仿真运行模块设计文档
## 1. 概述
仿真运行模块是 XNSimPortal 系统的核心功能之一,负责组织、调度和监控仿真任务的全流程。该模块支持模型组与服务的自动加载、仿真任务的启动/暂停/终止、实时日志输出、进程状态监控等。前端采用 Web Components 技术,后端提供 RESTful API 及 SSE 实时输出,支持与 DDS、XNEngine 等底层服务集成。
### 1.1 模块组成
- **前端组件**`run-sim.js` - 主组件
- **后端路由**
- `routes/run-simulation.js` - 仿真运行与管理 API
- `routes/configurations.js` - 构型与模型组、服务 API
- `routes/dds-monitor.js` - DDS 监控 API
- `routes/system-control.js` - 引擎控制 API
- `routes/stop-simulation.js` - 仿真终止 API
- `routes/simulation-output.js` - SSE 实时输出 API
- `routes/filesystem.js` - 日志文件读取 API
- **工具类**
- `utils/xnengine-process-utils.js` - 仿真进程管理工具
- `utils/db-utils.js` - 数据库操作工具
### 1.2 技术架构
```
┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐
│ 前端组件层 │ │ 后端API层 │ │ 底层服务/存储层 │
│ run-sim.js │<--►│ run-simulation │<--►│ XNEngine │
│ │ │ configurations │ │ DDS │
│ │ │ dds-monitor │ │ SQLite │
│ │ │ system-control │ │ 日志文件 │
│ │ │ simulation-output │ │ │
└────────────────────┘ └────────────────────┘ └────────────────────┘
```
## 2. 功能
### 2.1 核心功能
1. **模型组与服务加载**
- 自动加载当前构型下的模型组及其模型
- 自动加载当前构型下的服务及其版本
2. **仿真任务管理**
- 启动仿真/测试
- 暂停/继续仿真
- 终止仿真
- 进程状态检测与自动重连
3. **实时输出与日志**
- SSE 实时输出仿真日志
- 日志文件轮询与增量读取
- ANSI 终端颜色转 HTML
4. **状态监控与反馈**
- DDS 监控初始化与状态检测
- 仿真进程状态轮询
- UI 状态与按钮联动
### 2.2 辅助功能
- 错误与成功提示
- 自动重连机制
- 资源清理与事件解绑
## 3. 性能
### 3.1 性能指标
- **仿真启动响应**< 2s
- **日志输出延迟**< 200ms
- **并发仿真支持**支持多用户独立仿真
- **内存占用**前端 < 50MB
### 3.2 性能优化策略
- SSE 实时推送减少轮询压力
- 日志文件增量读取
- 按需加载模型组/服务
- 进程状态本地缓存与重连
## 4. 输入
### 4.1 用户输入
- 构型选择localStorage
- 仿真操作启动暂停终止按钮
- 运行参数自动从构型获取
### 4.2 系统输入
- 当前构型 ID
- 模型组与服务列表
- 仿真进程状态
- 日志文件路径
## 5. 输出
### 5.1 数据输出
- **模型组与服务列表**
```json
[
{
"name": "模型组名",
"groupId": "组ID",
"freq": 100,
"priority": 1,
"cpuAff": 0,
"models": [
{ "className": "模型类名", "version": "1.0.0" }
]
}
]
```
- **服务列表**
```json
[
{ "className": "服务类名", "version": "1.0.0" }
]
```
- **仿真运行结果**
```json
{
"success": true,
"simulationId": "进程ID",
"logFile": "日志文件路径",
"message": "仿真启动成功"
}
```
- **日志内容**
```json
{ "content": "日志文本" }
```
### 5.2 界面输出
- 模型组/服务列表卡片
- 仿真运行输出(带颜色)
- 状态提示(成功/错误/信息)
## 6. 算法
### 6.1 日志文件增量读取算法
```
1. 记录上次读取的文件位置
2. 定时100ms请求后端读取新内容
3. 拼接到前端输出区
4. 若进程结束,读取剩余内容并停止轮询
```
### 6.2 SSE 实时输出处理算法
```
1. 建立 EventSource 连接
2. 监听 output/status/completed/error/terminated 事件
3. 解析数据并更新 UI
4. 断线自动重连最多3次
```
### 6.3 仿真进程状态检测算法
```
1. 定时请求 /api/check-process/:id
2. 若 running=false重置UI
3. 若 running=true保持连接
```
## 7. 流程
### 7.1 仿真运行主流程
```mermaid
graph TD
A[用户点击运行仿真] --> B[获取构型参数]
B --> C[初始化DDS监控]
C --> D[初始化引擎控制]
D --> E[启动仿真进程]
E --> F[建立SSE连接]
F --> G[实时输出日志]
G --> H{仿真状态}
H -->|运行中| G
H -->|结束| I[重置UI]
```
### 7.2 日志输出流程
```mermaid
graph TD
A[仿真进程启动] --> B[生成日志文件]
B --> C[前端定时请求日志内容]
C --> D[后端返回新内容]
D --> E[前端拼接显示]
E --> F{进程状态}
F -->|运行| C
F -->|结束| G[停止轮询]
```
## 8. 接口
所有接口均以/api 为前缀数据格式为 JSON采用 HTTP/HTTPS 协议具体接口有
1. GET /api/configurations/:confID/model-groups1功能获取指定构型下的模型组列表2输入confID路径参数3输出JSON 对象{ success: boolean, message: string, data: array }4说明返回所有模型组及其基本信息
2. GET /api/model-groups/:groupId/models1功能获取指定模型组下的模型列表2输入groupId路径参数3输出JSON 对象{ success: boolean, message: string, data: array }4说明返回指定模型组下的所有模型及其版本
3. GET /api/configurations/:confID/services1功能获取指定构型下的服务列表2输入confID路径参数3输出JSON 对象{ success: boolean, message: string, data: array }4说明返回所有服务及其版本信息
4. POST /api/run-simulation1功能启动仿真或测试任务2输入JSON 对象{ args: array, timeout?: number }3输出JSON 对象{ success: boolean, simulationId: string, logFile: string, message: string }4说明启动仿真进程返回进程ID和日志文件路径
5. GET /api/check-process/:id1功能检查仿真进程状态2输入id路径参数仿真进程ID3输出JSON 对象{ running: boolean, success: boolean, message: string }4说明返回指定进程是否仍在运行
6. GET /api/read-log-file1功能读取仿真日志文件内容2输入file查询参数日志文件路径position查询参数起始位置3输出JSON 对象{ content: string }4说明返回日志文件从指定位置开始的新内容
7. GET /api/check-xnengine1功能检测是否有正在运行的仿真进程2输入无参数3输出JSON 对象{ running: boolean, pid: string, message: string }4说明用于前端自动重连仿真
8. GET /api/configurations/:confID1功能获取指定构型的详细参数2输入confID路径参数3输出JSON 对象{ success: boolean, message: string, data: object }4说明返回构型的详细参数如DomainID等)。
9. POST /api/dds-monitor/initialize1功能初始化 DDS 监控2输入JSON 对象{ domainId, confID, forceGen? }3输出JSON 对象{ success: boolean, message: string }4说明初始化 DDS 监控环境
10. POST /api/system-control/initialize1功能初始化仿真引擎控制2输入无参数3输出JSON 对象{ success: boolean, message: string }4说明初始化仿真引擎控制环境
11. POST /api/system-control/pause1功能暂停仿真2输入无参数3输出JSON 对象{ success: boolean, message: string }4说明暂停仿真进程
12. POST /api/system-control/resume1功能继续仿真2输入无参数3输出JSON 对象{ success: boolean, message: string }4说明恢复仿真进程
13. POST /api/system-control/stop1功能停止仿真2输入无参数3输出JSON 对象{ success: boolean, message: string }4说明停止仿真进程
14. POST /api/stop-simulation1功能终止仿真并清理资源2输入JSON 对象{ id: string }3输出JSON 对象{ success: boolean, message: string }4说明终止仿真进程并清理相关记录
15. GET /api/simulation-output/:simulationId
1功能获取仿真实时输出SSE
2输入simulationId路径参数
3输出SSE 事件流output/status/completed/error/terminated
4说明用于前端实时显示仿真输出
---
如需补充参数字段或详细说明请告知