独立运行的、带 Web 前端的网络拓扑管理器。
接收来自 FasterEdge 节点(NetMapAbility)的拓扑快照,在浏览器中实时渲染网络拓扑图。
- 后端:Go 标准库 +
net/http,使用 FasterEdge 的NetMapData/NetMapAbility数据模型 - 前端:纯 vanilla JS + SVG 自绘拓扑(无外部 CDN,可完全离线运行),
go:embed嵌入二进制 - 传输:REST API,周期性轮询上游节点拉取拓扑(JSON over HTTP)
- 存储:内存拓扑表,支持并发读写
# 启动一个 hub,周期性轮询 3 个 FasterEdge 节点
netmap -addr=:8080 -name=hub-01 -allow-private-nodes \
-node=edge-a=http://10.0.0.1:8080 \
-node=edge-b=http://10.0.0.2:8080 \
-node=cloud-c=https://ctrl.example.com
# 浏览器打开 http://localhost:8080/ 即可看到拓扑图。| 路径 | 方法 | 说明 |
|---|---|---|
/ |
GET | 内嵌的 Web 前端(SVG 拓扑图) |
/api/topology |
GET | 完整拓扑({self, peers[]}) |
/api/peers |
GET | 对等节点列表 |
/api/self |
GET | 本节点信息 |
/api/healthz |
GET | 健康检查 |
/api/v1/topology |
POST | 使用 Bearer Token 上报拓扑;仅配置 -ingest-token 后启用 |
/api/v1/sources |
GET | 数据源状态列表 |
/api/... |
OPTIONS | CORS 预检(返回 204) |
go test ./... # 单元测试
go build -o netmap ./cmd/netmap
./netmap -name=dev-addr:HTTP 监听地址,默认:8080-origin:CORS 允许的 origin,默认空(关闭 CORS),*启用-name:本节点显示名-allow-private-nodes:允许轮询回环、RFC1918、链路本地及组播地址;仅建议开发环境使用-state-file:状态快照文件,默认netmap-state.json,设为空可禁用持久化-ingest-token:启用拓扑上报接口所需的 Bearer Token
┌────────────────────┐
│ FasterEdge 节点 │
│ (跑 NetMapAbility) │
└──────────┬─────────┘
│ HTTP /api/topology (轮询)
▼
┌────────────────────┐
│ NetMap │
│ ┌──────────────┐ │
│ │ Store │ │ ◀──── 内存拓扑
│ └──────────────┘ │
│ ┌──────────────┐ │
│ │ HTTP Server │ │ ────▶ 浏览器 (内嵌 SVG)
│ └──────────────┘ │
└────────────────────┘
无 cgo、无 unsafe 依赖,跨 6 平台编译通过(linux/amd64, linux/arm64, windows/amd64, darwin/amd64, darwin/arm64, freebsd/amd64)。
NetMap 是 FasterEdge 的独立生态项目——它不替代 NetMapAbility,而是在多节点部署场景中扮演"中心化拓扑面板"角色:
NetMapAbility负责单节点的本地拓扑NetMap负责多节点的全局视图
二者通过 JSON over HTTP 互联,FastEdge 节点自身只需开放 /api/topology 即可被 NetMap 拉取。
