Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何刷新bonjour的服务列表?_Python_Networking_Bonjour - Fatal编程技术网

Python 如何刷新bonjour的服务列表?

Python 如何刷新bonjour的服务列表?,python,networking,bonjour,Python,Networking,Bonjour,我们的应用程序使用Bonjour来发现网络上的服务。在DNSServiceResolveCallback中,当发现新服务时,我将向应用程序的另一部分发送一条消息,然后继续连接到新发现的服务器。例如,心跳机制允许我们在拔下电缆后立即检测连接故障 Bonjour本身不会立即检测到此类故障,因此我知道我需要手动使Bonjour的缓存失效 但是怎么做呢 似乎我需要打电话,但我应该通过哪些选项?特别是,我的全名、rrtype和rdata应该是什么?苹果在解决失败时提供了see,但我真的不明白 在Bonjo

我们的应用程序使用Bonjour来发现网络上的服务。在DNSServiceResolveCallback中,当发现新服务时,我将向应用程序的另一部分发送一条消息,然后继续连接到新发现的服务器。例如,心跳机制允许我们在拔下电缆后立即检测连接故障

Bonjour本身不会立即检测到此类故障,因此我知道我需要手动使Bonjour的缓存失效

但是怎么做呢

似乎我需要打电话,但我应该通过哪些选项?特别是,我的全名、rrtype和rdata应该是什么?苹果在解决失败时提供了see,但我真的不明白

在Bonjour的缓存失效后,在哪里会通知我服务不再存在?在什么地方

如果服务再次上线,网线回复,是否会在浏览回拨中通知我


添加服务时,您的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返回错误代码。