希望优化 iOS 从暂停状态恢复时的自动健康检查策略,在保留必要连通性验证的同时,减少未使用节点的批量探测及相关 CPU、网络栈和无线通信开销。
以下依据 Hako 提交 35c9bb6 。目前确认的是源码行为。
当前行为
在
|
stopPauseTracking := pause.RegisterTicker(ticker, hc.interval, func() { go hc.check() }) |
中,健康检查注册的恢复回调直接执行 hc.check():
stopPauseTracking := pause.RegisterTicker(
ticker, hc.interval,
func() { go hc.check() },
)
普通定时触发分支会判断 lazy 和最近使用时间:
if !hc.lazy || since < hc.interval {
hc.check()
}
但恢复回调没有经过这层判断。因此,当设备实际发生“暂停 → 恢复”转换时,已启动自动健康检查的 provider 即使配置了 lazy: true,也可能立即参与检查。
检查会遍历对应 provider 的节点;多个 provider 同时恢复时,可能形成较大范围的批量探测。实际范围仍受测试 URL、过滤条件和探测准入控制影响,并非必然
测试所有订阅节点。
另外,BoxService.Wake() (
|
func (s *BoxService) Wake() { |
) 会调用
DeviceWake();Pause() 设置的一分钟兜底计时器
(
|
func (s *BoxService) armEndPauseTimer() { |
)
也可以触发恢复。因此,恢复检查的发生不一定代表用户开始使用这些 provider。
希望优化 iOS 从暂停状态恢复时的自动健康检查策略,在保留必要连通性验证的同时,减少未使用节点的批量探测及相关 CPU、网络栈和无线通信开销。
以下依据 Hako 提交 35c9bb6 。目前确认的是源码行为。
当前行为
在
Hako/adapter/provider/healthcheck.go
Line 71 in 35c9bb6
中,健康检查注册的恢复回调直接执行 hc.check():
stopPauseTracking := pause.RegisterTicker(
ticker, hc.interval,
func() { go hc.check() },
)
普通定时触发分支会判断 lazy 和最近使用时间:
if !hc.lazy || since < hc.interval {
hc.check()
}
但恢复回调没有经过这层判断。因此,当设备实际发生“暂停 → 恢复”转换时,已启动自动健康检查的 provider 即使配置了 lazy: true,也可能立即参与检查。
检查会遍历对应 provider 的节点;多个 provider 同时恢复时,可能形成较大范围的批量探测。实际范围仍受测试 URL、过滤条件和探测准入控制影响,并非必然
测试所有订阅节点。
另外,BoxService.Wake() (
Hako/bind/hako/service.go
Line 1075 in 35c9bb6
DeviceWake();Pause() 设置的一分钟兜底计时器
(
Hako/bind/hako/service.go
Line 1046 in 35c9bb6
也可以触发恢复。因此,恢复检查的发生不一定代表用户开始使用这些 provider。