diff --git a/docs/index.html b/docs/index.html index 55a4d59..7a01066 100644 --- a/docs/index.html +++ b/docs/index.html @@ -108,6 +108,11 @@
逐功能盘点验证五端是否正确:A 共享逻辑+后端(控制面 21 包/数据面渲染+记账/Flutter 共享),每行「现有能力→已覆盖+怎么覆盖→欠缺→只能人工」;B 平台隧道层五端矩阵 + 每端真连通验收清单(出口IP变化/DNS劫持/分流/记账对账/KillSwitch/切节点)。配套 test-architecture.html 的「逐功能」视角。
docs/feature-test-coverage-checklist.html
+ +
流量记账口径 · 连接页实时 vs 统计页累计 HTML
+
客户端两处"上传/下载"为何对不上:连接页实时来自内核 Clash API 全局吞吐(/traffic+/connections)含直连;统计页累计来自服务端节点 v2ray_api per-user 计数仅代理。差额=直连流量(国内站/分流),设计使然非 bug;附对账口径警示(不能拿连接页含直连的数去对节点计数)。
+
docs/traffic-accounting-scopes.html
+
KillSwitch 设计与跨平台能力矩阵 HTML
断网保护 L0–L3 分级模型 + 各平台能力天花板 / 当前实现矩阵。KillSwitch 决策依据。
diff --git a/docs/traffic-accounting-scopes.html b/docs/traffic-accounting-scopes.html new file mode 100644 index 0000000..8531747 --- /dev/null +++ b/docs/traffic-accounting-scopes.html @@ -0,0 +1,116 @@ + + + + + +Pangolin 流量记账口径 · 连接页实时 vs 统计页累计 + + + +
+ +

流量记账口径 · 连接页实时 vs 统计页累计

+

两个上下行数字来自不同源、统计的是不同范围——连接页含直连,统计页只算代理

+ +
+一句话:客户端有两处"上传/下载"数字,口径不同、天然对不上。 +连接页实时速率来自本地内核的全局吞吐,含直连统计页累计用量来自服务端按用户的节点计数,只含真正经过节点的代理流量。两者差额 = 直连流量(国内站 / 分流 direct / LAN)。这是设计使然,非 bug:计费/配额按代理流量算。 +
+ +

两个数据源

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
维度连接页 · 实时上下行统计页 · 累计用量
取数源客户端内核 Clash API
GET /traffic(SSE 推 {up,down} bytes/s)+ GET /connectionsdownloadTotal/uploadTotal 差分算瞬时速率)
服务端 GET /v1/usage ← 节点 sing-box v2ray_api StatsService 的 per-user 计数器
计数粒度sing-box 引擎全局总量(不分出站,所有连接合计)每用户独立计数器 user>>>{dp_uuid}>>>traffic>>>uplink|downlink
测量位置客户端本机(TUN 入口处的总吞吐)节点上(只有流量真正到达节点才被计)
含直连流量?含 ✅不含 ❌
语义"这台设备此刻的总网速"(代理 + 直连)"通过节点代理出去、计费口径的用量"
+ +

为什么统计页不含直连

+

全局 TUN 模式下,客户端 sing-box 按路由规则把流量分成两类:

+ +

所以服务端记账(统计页)物理上只能看到代理流量。直连那部分对节点是不可见的。

+ +

结论与含义

+ + +

现状决策(2026-06-29)

+

保持现状,不改连接页口径。连接页继续显示"总吞吐"语义(含直连)——与多数客户端一致;统计页继续"仅代理"。两者口径差异由本文档说明,不视为缺陷。

+
+若未来要让两者口径一致:连接页可改为仅累加走 proxy 出站的连接字节——/connections 每条连接带 chains/outbound 信息可分类求和;全局 SSE /traffic 给不了出站维度,需改用 /connections 轮询差分。当前未做。 +
+ +

相关代码 / 文档

+
+ +
+ +