From 0736014552934d329e16d76554b54edd1ced8b32 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Mon, 29 Jun 2026 23:28:39 +0800 Subject: [PATCH] =?UTF-8?q?fix(client):=20=E5=BB=B6=E8=BF=9F=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E7=94=A8=20node.ping(client=E2=86=92=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=9D=A2=20RTT),=E8=BF=9E=E6=8E=A5=E9=A1=B5=E4=B8=8E?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E5=88=97=E8=A1=A8=E5=90=8C=E6=BA=90=E4=B8=80?= =?UTF-8?q?=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 撤掉连接页连接态的内核 urltest —— 它与节点列表的 node.ping 是两套口径、两处显示不一致。 统一全部用 node.ping(直接 TCP 握手 节点:443),连接页显示生效节点的 ping、节点列表显示 各节点 ping,永远同一个数。连接态 TUN 测不到新值则保留上次实测(_measure 已改保留)。 Co-Authored-By: Claude Opus 4.8 --- client/lib/screens/connect_page.dart | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/client/lib/screens/connect_page.dart b/client/lib/screens/connect_page.dart index a229478..9974abf 100644 --- a/client/lib/screens/connect_page.dart +++ b/client/lib/screens/connect_page.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../bridge/vpn_bridge.dart'; import '../core/responsive/form_factor.dart'; import '../util/format.dart'; import '../l10n/app_text.dart'; @@ -41,12 +40,9 @@ class ConnectPage extends ConsumerWidget { } final down = formatSpeed(stats?.downloadSpeed); final up = formatSpeed(stats?.uploadSpeed); - // 延迟 = client→数据面 RTT,按连接态取不同测法(全局 TUN 下 App socket 测不到真节点): - // · 连接态:内核 urltest —— sing-box 经 REALITY 真实直连数据面探出的 RTT(唯一可靠口径); - // 节点死 → urltest=0 → 落到 —,本身即健康信号。 - // · 断开态:节点页 TCP 探针(直接握手 节点:443,无 TUN,真实 RTT)。 - var livePing = conn.phase == VpnPhase.on ? _bestUrltest(stats) : node.ping; - if (livePing <= 0 && conn.phase != VpnPhase.on) livePing = node.ping; + // 延迟统一用 node.ping(直接 TCP 握手 节点:443 = client→数据面 RTT),与节点列表同源, + // 两处显示永远一致。连接态全局 TUN 测不到新值 → 保留上次断开态实测(见 nodes_provider._measure)。 + final livePing = node.ping; final pingLabel = livePing > 0 ? '${livePing}ms' : '—'; final latencyValue = livePing > 0 ? '$livePing' : '—'; @@ -210,13 +206,6 @@ class ConnectPage extends ConsumerWidget { } } -/// 内核 urltest 各出站中的最小正延迟(ms);无则 0。连接态用作 client→数据面 RTT。 -int _bestUrltest(VpnStatsEvent? s) { - if (s == null) return 0; - final ds = s.urltestResults.where((r) => r.delayMs > 0).map((r) => r.delayMs); - return ds.isEmpty ? 0 : ds.reduce((a, b) => a < b ? a : b); -} - /// 实时速率行(连接成功时显示;来自内核 statsStream 实时数据)。 class _SpeedRow extends StatelessWidget { const _SpeedRow({required this.t, required this.down, required this.up, required this.latency});