Python 如何刷新bonjour的服务列表?
我们的应用程序使用Bonjour来发现网络上的服务。在DNSServiceResolveCallback中,当发现新服务时,我将向应用程序的另一部分发送一条消息,然后继续连接到新发现的服务器。例如,心跳机制允许我们在拔下电缆后立即检测连接故障 Bonjour本身不会立即检测到此类故障,因此我知道我需要手动使Bonjour的缓存失效 但是怎么做呢 似乎我需要打电话,但我应该通过哪些选项?特别是,我的全名、rrtype和rdata应该是什么?苹果在解决失败时提供了see,但我真的不明白 在Bonjour的缓存失效后,在哪里会通知我服务不再存在?在什么地方 如果服务再次上线,网线回复,是否会在浏览回拨中通知我Python 如何刷新bonjour的服务列表?,python,networking,bonjour,Python,Networking,Bonjour,我们的应用程序使用Bonjour来发现网络上的服务。在DNSServiceResolveCallback中,当发现新服务时,我将向应用程序的另一部分发送一条消息,然后继续连接到新发现的服务器。例如,心跳机制允许我们在拔下电缆后立即检测连接故障 Bonjour本身不会立即检测到此类故障,因此我知道我需要手动使Bonjour的缓存失效 但是怎么做呢 似乎我需要打电话,但我应该通过哪些选项?特别是,我的全名、rrtype和rdata应该是什么?苹果在解决失败时提供了see,但我真的不明白 在Bonjo
添加服务时,您的brows回调应接收kDNSServiceFlagsAdd。如果没有设置标志,我的用户就可以假设服务消失了。贵公司是否对已看到的服务进行了内部核算?每次断开连接时使整个缓存失效将导致相当大的网络开销 这是我的特殊包装 更新和修复: 您需要查询该记录,以获得要传递给DNSServiceReconfirmRecord的正确字段。例如 然后试试看
pybonjour.DNSServiceReconfirmRecord(0,
interfaceIndex,
fullname,
rrtype,
rrclass,
rdata)
您必须保留对解析/查询回调中收到的相关字段的引用。rrtype字段是记录的类型,通常是kDNSServiceType_SRV。rrclass始终是kDNSServiceClass_,因为这是唯一定义的。这是否意味着您需要像每5秒一样定期浏览,构建发现的机器列表,并将其与以前的列表进行比较?我正在使用select,当机器消失时,不会调用浏览回调。浏览是连续的。您基本上是向MDN注册以接收新服务广播的通知。示例中的if not flags&pybonjour.kDNSServiceFlagsAdd:in browse_回调正在执行我在回答中描述的操作。如果您直接使用这些示例,您应该会看到服务删除。这是浏览器的输出,在启动和停止注册示例$python bonjour.py_test之后解析;正在解析已解析的服务:fullname=TestService.\u test.\u tcp.local。hosttarget=Ripley.local。端口=1234已删除服务已添加服务;正在解析已解析的服务:fullname=TestService.\u test.\u tcp.local。hosttarget=Ripley.local。port=1234当服务被取消注册时,我确实看到服务被删除。但是,如果连接丢失,以太网电缆拔下,本地Bonjour浏览器将不会收到通知,因为Bonjour保留了一个具有相当长TTL的discoverer服务的本地缓存。pybonjour似乎不会从DNSServiceReconfirmRecord返回错误代码。