# 科技风险模拟系统 **Repository Path**: donshawn/risk-simulation-system ## Basic Information - **Project Name**: 科技风险模拟系统 - **Description**: 科技风险模拟系统 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-08 - **Last Updated**: 2025-09-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 目录 ```bash lan-sim/ ├─ docker-compose.yml ├─ .env ├─ README.md ├─ broker/ │ ├─ mosquitto.conf │ └─ Dockerfile ├─ pub/ │ ├─ Dockerfile │ └─ app/ │ └─ publisher.py ├─ sub/ │ ├─ Dockerfile │ └─ app/ │ └─ subscriber.py ├─ inputs/ │ ├─ input01.txt │ ├─ input02.txt │ ├─ input03.txt │ ├─ input04.txt │ └─ input05.txt └─ outputs/ # 运行后生成:接收端落盘目录 ``` # 局域网仿真(MQTT + Docker) 本项目在单机上用 Docker 自定义 bridge 网络模拟“局域网”,在其中运行 1 个 MQTT Broker(Mosquitto)、5 个发射器(Publisher)与 5 个接收器(Subscriber)。发射器每 20 秒从各自的 txt 文件读取一行并广播,接收器收到后立即落盘为滚动日志文件。 ## 1. 先决条件 - Docker 24+ / Docker Desktop - `docker compose` 插件 ## 2. 快速开始 ```bash # 克隆/下载本仓库后进入项目目录 # 1) 构建镜像 docker compose build # 2) 启动 docker compose up -d # 3) 查看运行情况 docker compose ps # 4) 观察 broker 日志 docker compose logs -f broker # 5) 观察某个发射器/接收器 docker compose logs -f pub01 # 或 docker compose logs -f sub01 ``` ## 3. 目录/卷说明 * `inputs/`:5 份输入 txt,分别挂载给 5 个发射器。 * `outputs/sub-**/`:接收器落盘目录(容器启动后自动生成)。 * `pub_state/`:发射器游标(当前行号、seq)持久化,重启可续传。 * `broker_data`、`broker_log`:Mosquitto 的数据/日志卷。 ## 4. 参数调整 在 `docker-compose.yml` 中修改环境变量: * `INTERVAL_SEC`:发射频率(秒)。 * `QOS`:0/1/2(默认 1)。 * `ROLLING`:接收端滚动策略(`hourly`/`daily`)。 * `DEDUP_CACHE`:去重窗口大小(条)。 ## 5. 验收建议 * 停掉一个接收器 `docker compose stop sub03`,1~2 分钟后 `docker compose start sub03`,核对是否漏消息(QoS=1 + 窗口去重确保“至少一次”与幂等)。 * 将某发射器的 `INTERVAL_SEC` 改为 5 秒,观察 outputs 增长与 Broker `$SYS/#` 指标。 ## 6. 常见问题 * **不能连接 broker** :检查 `broker` 容器健康状态,确认端口 1883 已开放且在同一自定义网络 `lan-net`。 * **中文乱码** :项目统一使用 UTF-8 读写;请确保输入 txt 为 UTF-8 编码。 * **重复消息** :QoS=1 语义可能重发,接收端已基于 `(pub_id, seq)` 去重。 ## 7. 清理 ```bash docker compose down -v ``` ``` --- ### 备注 - 以上版本将 `$SYS/#` 作为轻量观测;若需可另加监控容器或导出至 Prometheus。 - 若要鉴权/加密:在 `mosquitto.conf` 启用 `password_file` 与 TLS listener,并按需修改 compose 暴露端口与客户端连接参数。 ```