NWPathMonitor 不响应网络链接调节器配置文件更改

问题描述 投票:0回答:1

我正在开发 macOS 应用程序,想要检查连接状态。我使用 NWPathMonitor 创建了一个简单的连接观察器;我将它用作环境对象:

@Observable
class ConnectivityMonitor {
    private let queue = DispatchQueue(label: "ConnectivityMonitorQueue")
    private let monitor = NWPathMonitor()
    
    private(set) var isConnected: Bool = false
    
    init() {
        monitor.pathUpdateHandler = { [weak self] path in
            DispatchQueue.main.async {
                self?.isConnected = path.status == .satisfied
                print("network path changed: ", path.status)
            }
        }
        monitor.start(queue: queue)
    }
}

要检查不同的连接状态,我使用 Apple 随 Xcode 附加工具提供的 Network Link Conditioner prefpane(我将其称为 NLC)

我不知道为什么,但 NWPathMonitor 不响应 NLC 配置文件更改。

例如;我将 NLC 配置文件设置为

100% Loss,这意味着网络上根本没有互联网连接。但是 NWPathMonitor 的 pathUpdateHandler

 没有被调用。

我错过了什么吗?谢谢。

swift macos connectivity nwpathmonitor
1个回答
0
投票
100% 丢失与断开连接不同。

NWPathMonitor

 正在检查路线是否存在。我所说的路由是指有一个网络接口可以接受发往给定地址的数据包。

这条路线存在。它碰巧丢弃了每个数据包,但监视器不知道这一点,也无法知道这一点。了解数据包是否将被传送的唯一方法是发送数据包并接收响应。

NWPathMonitor

 根本不发送任何数据包,因此看不到丢包。

通常,“可达性”检查的使用有限。他们可以告诉您系统甚至不会尝试发送数据包,因为无线电已关闭。但他们无法告诉您您发送的消息将被传递。最后,你必须发送数据包,看看会发生什么。

这不是

NWPathMonitor

的失败。这是关于网络的基本事实。他们就像邮局。没有办法知道你放入邮箱的一封信是否真的会送达,如果送达,对方是否会回复。 
NWPathMonitor
 是在告诉你“是的,拐角处有一个邮箱,而且没有锁。”如果您的邮递员决定将所有信件扔进沟里(100% 丢包),则无法提前知道这一点。

© www.soinside.com 2019 - 2024. All rights reserved.