## webserver 目录结构
```
webserver/
├── mod.rs — 模块入口,导出子模块
├── ruapp.rs — RuApp 核心结构体,封装 Actix 启动逻辑
├── ruapp_init.rs — DI 自动注入文件(自动生成)
├── start_web.rs — Web 服务启动入口
├── example.rs — 旧示例代码(全部注释)
└── readme.MD — 说明文档
```
### 数据流
```
start_web::start_web()
│
├─ 有命令行参数 → rucmd::execute() → ctlc() 阻塞等待
│
└─ 无参数 → find_bean_ruapp().run()
│
├─ rucfg 读取配置端口
├─ HttpServer::new(move || {
│ App::new().configure(|cfg| {
│ with_container_mut(|c| c.apply_routes(cfg))
│ })
│ })
└─ .bind(("0.0.0.0", port)).run().await
```
### 各文件职责
| `mod.rs` | 模块导出 | `pub mod example`, `pub mod ruapp_init`, `pub mod start_web` |
| `ruapp.rs` | 核心 | `RuApp` 结构体,`run()` 启动 HttpServer,`str2i32()` 工具方法 |
| `ruapp_init.rs` | DI 注册 | `#[ctor]` 自动注册 `RuApp` 到 DI 容器 |
| `start_web.rs` | 入口 | `start_web()` 判断命令行参数,分发到 cmd 或 web |
| `example.rs` | 历史 | 全部注释掉的旧代码示例 |
### 关键依赖链
```
start_web → ruapp_init(ctor) → DI 注册 RuApp
start_web → rucmd(命令行) 或 ruapp.run()
ruapp.run() → rucfg(配置) → rulog(日志) → webrouter(路由容器)
```
Let me present this cleanly.
## `webserver/` 目录结构
```
webserver/
├── mod.rs — 模块入口
├── ruapp.rs — Web 核心:服务器启动、配置读取
├── ruapp_init.rs — DI 自动注入(自动生成)
├── start_web.rs — 统一入口:命令行 / Web 分流
├── example.rs — 旧示例代码(全部注释)
└── readme.MD
```
## 数据流
```
start_web()
│
├─ 有命令行参数
│ └─ rucmd::execute() → ctlc() 阻塞等待 Ctrl+C
│
└─ 无参数
└─ find_bean_ruapp().run()
│
├─ rucfg 读取配置端口
├─ HttpServer::new(|| {
│ App::new().configure(|cfg| {
│ with_container_mut(|c| c.apply_routes(cfg))
│ })
│ })
└─ .bind(("0.0.0.0", port)).run().await
```
## 各文件职责
| [start_web.rs](file:///E:/soft/gitee.com/ruwebframe/src/ruweb/webserver/start_web.rs) | **统一入口** | `args.len()>=2` 走命令行,否则启动 Web |
| [ruapp.rs](file:///E:/soft/gitee.com/ruwebframe/src/ruweb/webserver/ruapp.rs) | **Web 核心** | `RuApp::run()` 创建 `HttpServer`,`with_container_mut` 应用路由 |
| [ruapp_init.rs](file:///E:/soft/gitee.com/ruwebframe/src/ruweb/webserver/ruapp_init.rs) | **DI 注册** | `#[ctor]` 自动注册 `RuApp` 到 DI 容器 |
| [example.rs](file:///E:/soft/gitee.com/ruwebframe/src/ruweb/webserver/example.rs) | **历史代码** | 全部注释,可删除 |
## 依赖链
```
ruapp_init(#[ctor]) ──→ DI 注册 RuApp
│
start_web ──→ find_bean_ruapp().run()
│
├── rucfg (配置)
├── rulog (日志)
└── webrouter (路由容器)
```
## 路由注册流程
```
各模块 register() ──→ register_route() ──→ RouteConfigContainer.add()
│
HttpServer::new ──→ App::configure ──→ with_container_mut()
│
container.apply_routes(cfg)
```