我正在尝试用 Avahi 编写某种服务浏览器。发现和解决新服务工作得很好,但是当我尝试解决在 ItemRemoved 处理程序中丢失的服务时遇到了问题。出现“org.freedesktop.Avahi.TimeoutError:超时”错误。我想我做错了,所以我的问题是:
如何在 ItemRemoved 处理程序中解析丢失服务的 IP 地址?
我正在尝试用 Avahi 编写某种服务浏览器。发现和解决新服务工作得很好,但是当我尝试解决在 ItemRemoved 处理程序中丢失的服务时遇到了问题。出现“org.freedesktop.Avahi.TimeoutError:超时”错误。我想我做错了,所以我的问题是:
如何在 ItemRemoved 处理程序中解析丢失服务的 IP 地址?
如果服务被删除,您将无法解决它,因为该服务不再存在。它的记录不再有效。
您需要做的是使用 DNS-SD 服务名称(例如 My Print Service._http._tcp)作为您在内部缓存中存储和删除内容的键。
理想情况下,您只会在实际需要连接到该服务时才解析该服务,这有助于减少网络流量并确保在您使用它时 IP 地址是最新/有效的。一旦解决,如果您将 IP 与服务名称一起存储,那么您就拥有了您所需要的东西。
我在客户端 Linux Mint 18 和服务提供商 Raspbian 9 (stretch) 之间遇到了与 Avahi 相同的 TimeoutError 问题,但我的问题是间歇性的,但似乎经常在重启 Rasbian 电脑后出现。
我注意到当 Avahi-Discover(客户端上的 sudo apt install avahi-discover)显示服务但没有任何数据时,那是我得到 TimeoutError 的时候,所以我只是重复“服务 avahi-daemon restart”(在avahi 服务提供商),直到我在客户端的 avahi-discover 中获取数据。
这不是一个解决方案,但它是一个修复。而且我需要继续使用 avahi 服务的其他工作,而不是花时间解决 avahi 问题。我在互联网上找到的解决方案很少,但有很多未解决的例子。这对我来说已经持续了几个星期,我的调查也是如此。我希望这个修复对解决这个烦人的问题有所帮助并开始更多的讨论。