我正在编写一个可以在电脑和手机上运行的软件。
该服务使用 HTTP API 进行通信,并将使用 Zeroconf 在本地网络上发布。
最初我使用_http._tcp.
服务类型发布了我的服务,但我很快发现我的 NAS 和我的音乐接收器(!)也使用该确切的服务类型广播自己。
所以现在的问题是如何区分我的服务和其他使用 HTTP 的服务。
备择方案
使用不同的服务类型
这当然是最简单的方法,并且(几乎)保证不会使用其他服务。
但是,根据 Apple 1 ,新服务应在 IANA 注册。这显然不是必需的,但看到他们推荐它,感觉这是错误的做法
使用 TXT 记录
Apple 2是这样描述 TXT 记录的:
注册服务时,会创建三个相关的 DNS 记录:服务 (SRV) 记录、指针 (PTR) 记录和文本 (TXT) 记录。TXT 记录包含解析或使用服务所需的其他数据,尽管它通常也是空的。
当然感觉这可能是正确的方法,但我仍然不确定,很难找到该字段应包含的内容的描述。
我的第一个想法是放置类似<service_name>-<version>
which 的内容,然后对其进行解析以查看它实际上是哪个服务。
我的 NAS 似乎使用它来识别型号和版本号。
尝试与服务交谈
找到服务后,总是可以HEAD
在已知端点上执行请求并查找服务设置的已知标头。
这感觉像是一种相当缓慢的方法,谁知道HEAD
向我的接收者发出请求会做什么。
需要明确的是,这个问题与特定的语言或框架无关,它与 zeroconf 的概念有关。
我可以显示一些代码,但我看不出这有什么帮助。