fix:更新客户端功能

This commit is contained in:
nnbcccscdscdsc
2026-03-16 22:28:05 +08:00
parent 7f2f79e672
commit 6c975d9ae3
18 changed files with 8067 additions and 33092 deletions

View File

@@ -5,6 +5,9 @@
- 客户端:文件分片发送 + 异步接收服务端 ASCII 指令
- 服务端:接收并写文件 + 交互输入指令下发客户端
- 转发器A->B 中转,支持运行时动态修改目标端口
- Hub云端多客户端注册/绑定/路由,支持 A ↔ C ↔ B 命令透传
- Peer主动连接 Hub 的对等端,支持 `register / bind / send / say`
- 启动前时钟同步:客户端先测 `RTT + offset`,服务端据此输出补偿后的端到端时延
## 目录结构
@@ -26,6 +29,8 @@ OmniSocket/
│ │ └── logger.c # 性能统计日志
│ └── apps/
│ ├── client_main.c # 客户端入口
│ ├── hub_main.c # Hub 入口(多客户端注册/路由)
│ ├── peer_main.c # Peer 入口(连接 Hub 的对等端)
│ ├── server_main.c # 服务端入口
│ ├── relay_main.c # 转发器入口
│ └── test_main.c # 简易协议连通性测试
@@ -46,6 +51,8 @@ make
生成:
- `build/omni_client`
- `build/omni_hub`
- `build/omni_peer`
- `build/omni_server`
- `build/omni_relay`
- `build/omni_test`
@@ -84,6 +91,8 @@ build/omni_client -p tcp|udp|kcp -H <server_ip> -P <server_port> -f <file> [-b <
- 发送结束后额外发送 `FILE_END` 控制包
- 后台线程持续接收并打印服务端 ASCII 指令
- `-w -1` 表示常驻模式,直到手动 `Ctrl+C`
- 建连后会先自动发送 `TIME_SYNC_REQ/RESP/REPORT`,以最小 RTT 样本估算 `server_time - client_time`
- 若同步响应不可达(例如经过当前实现的单向 relay文件传输仍继续但服务端不会产出补偿后的 `end_to_end_delay_ms`
### `omni_relay`
@@ -96,6 +105,36 @@ build/omni_relay -p tcp|udp|kcp -L <listen_port> -H <target_ip> -P <target_port>
- `show`:显示当前目标
- `quit`:退出 relay
### `omni_hub`
```bash
build/omni_hub -P <listen_port> [-b <bind_ip>] [-p tcp]
```
说明:
- 当前阶段只实现 TCP 控制面
- 多个 `omni_peer` 主动连接到 hub 后,先用 `client_id` 注册
- hub 维护 `client_id -> socket` 映射,并按 `dst_id` 转发 `PEER_TUNNEL`
### `omni_peer`
```bash
build/omni_peer -H <hub_ip> -P <hub_port> -i <client_id> [-b <peer_id>] [-d <peer_id>] [-m <text>] [-w <wait_seconds|-1>]
```
说明:
- `-i`:当前 peer 的逻辑 ID后续所有路由都依赖它不依赖私网 IP
- `-b`:启动后先请求绑定默认目标
- `-m`:启动后立即发一条命令;若同时给了 `-d`,则直接发给该目标
- `-w`one-shot 模式下等待若干秒再退出,`-1` 表示常驻
交互命令:
- `bind <peer_id>`:绑定默认目标
- `send <text>`:发给当前绑定目标
- `say <peer_id> <text>`:显式指定目标
- `show`:显示本地 `client_id / bound_peer`
- `quit`:退出
## 快速启动(本机)
先准备一个测试文件:
@@ -124,6 +163,10 @@ build/omni_client -p tcp -H 127.0.0.1 -P 9000 -f /tmp/input.bin
cmp -s /tmp/input.bin /tmp/out_tcp.bin && echo OK || echo FAIL
```
日志观察:
- client / server 的 `summary` 日志会新增 `clock_sync_ok``clock_offset_ms``clock_sync_rtt_ms``clock_sync_samples`
- server 侧的 `end_to_end_avg_ms``clock_sync_ok=1` 时表示已经按 offset 补偿后的端到端时延
### UDP 直连2 个终端)
终端 1
@@ -190,3 +233,42 @@ relay 终端可输入:
show
set 127.0.0.1 9103
```
## Hub / Peer 场景3 个终端)
终端 1cloud hub C
```bash
build/omni_hub -P 9200
```
终端 2peer B
```bash
build/omni_peer -H 127.0.0.1 -P 9200 -i beta
```
终端 3peer A
```bash
build/omni_peer -H 127.0.0.1 -P 9200 -i alpha
```
在 A 终端输入:
```text
bind beta
send hello-from-alpha
```
此时 B 终端会打印:
```text
[peer alpha -> beta] hello-from-alpha
```
本地一键 smoke
```bash
./scripts/local_peer_smoke_test.sh
```