gpt4 book ai didi

bonjour - 使用 zeroconf 区分多个服务的正确方法

转载 作者:行者123 更新时间:2023-12-04 18:08:18 26 4
gpt4 key购买 nike

我正在编写一个可以在电脑和手机上运行的软件。

该服务使用 HTTP API 进行通信,并将使用 Zeroconf 通过本地网络发布。

最初我使用 _http._tcp. 发布了我的服务作为服务类型,但我很快发现我的 NAS 和我的音乐接收器(!)也使用这种确切的服务类型进行广播。

所以现在的问题是如何区分我的服务和其他使用 HTTP 的服务。

备择方案

使用不同的服务类型

这当然是最简单的方法,并且(几乎)保证不会选择其他服务。

但是,根据 Apple 1新服务应向 IANA 注册。这显然不是必需的,但看到他们推荐它,感觉这将是错误的方法

使用 TXT 记录

苹果 2像这样描述 TXT 记录:

When a service is registered, three related DNS records are created: a service (SRV) record, a pointer (PTR) record, and a text (TXT) record. The TXT record contains additional data needed to resolve or use the service, although it is also often empty.



当然感觉这可能是正确的方法,但我仍然不确定,并且很难找到该字段应包含的内容的描述。

我的第一个不过是放类似 <service_name>-<version> 的东西然后将对其进行解析以查看它实际上是哪个服务。

我的 NAS 似乎使用它来识别型号和版本号。

尝试与服务人员交谈

找到服务后,您总是可以执行 HEAD在已知端点上请求并查找服务设置的已知 header 。

这感觉是一种相当缓慢的方法,谁知道是什么制作 HEAD向我的接收者提出请求即可。

需要说明的是,这个问题与特定语言或框架无关,而是关于 zeroconf 的概念。

我可以展示一些代码,但我不知道这会有什么帮助。

最佳答案

首先,您所宣传的服务是否真的符合 _http 的资格?由 RFC 2782 定义.具体来说 - 它不仅使用 HTTP 进行传输,而且还:

  • 可以通过“典型”的网络浏览器客户端软件显示,和
  • 主要供人类用户查看。

  • 如果不是,请注册您自己的服务类型(还有一些其他服务使用 HTTP 作为传输,但不符合这些条件,因此它们将 -http 作为服务名称的后缀,参见 pgpkey-httpsenteo-http , xul-http )。

    如果是,则有几种方法可以根据一个人对 RFC 的解释的严格程度而定。最不严格的是添加一个 TXT 正如您在问题中已经指出的那样记录。 iTunes 使用 注册自己TXT 记录格式 iTSh Version=196618 .

    如果你觉得更严格一点,RFC 只明确指出 u= , p=path= HTTP 存在 TXT 记录。也许有人可以对此发表意见,但我没有看到太多关于将 TXT 记录添加到现有条目是否不赞成的讨论。因此,另一种方法是使用算法实例名称。例如,为设备名称添加后缀“-NicklasAService”。希望给它一个唯一的本地网络名称,但仍然可以通过 PTR 记录轻松地通过查找后缀来选择该服务。

    关于bonjour - 使用 zeroconf 区分多个服务的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21052626/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com