该模块允许你在本地网络上发布自己的 Bonjour 服务。在 macOS 上,NetService 包含在 Cocoa 中,但是在 Linux 标准库中没有类似的东西。
从 0.5 版本开始,该库使用 dns_sd 作为响应器,而不是自己实现 mDNS。 在 macOS 上,这意味着它使用系统范围的守护进程,而在 Linux 上,应该安装 libavahi-compat-libdnssd-dev
来运行系统范围的守护进程。
另请参阅 NetService-Example。请注意,与 Apple 的 NetService 一样,你需要运行一个 RunLoop 才能使回调发生。
还包含一个名为 dns-sd
的命令行工具,它提供了 Apple 同名工具的部分功能。 当广告不起作用时,你可以使用此工具来验证实现并调试你的网络。 运行 swift run dns-sd --help
查看使用说明。
此代码将发布一个新的 NetService,声明端口 8000。 请注意,你需要自己设置一个在端口 8000 上监听的套接字。
import Foundation
import NetService
let service = NetService(domain: "local.", type: "_hap._tcp.", name: "Zithoek", port: 8000)
service.delegate = ...
service.publish()
withExtendedLifetime((service, delegate)) {
RunLoop.main.run()
}
此代码将开始搜索给定的服务类型。
let browser = NetServiceBrowser()
browser.delegate = ...
browser.searchForServices(ofType: "_airplay._tcp.", inDomain: "local.")
withExtendedLifetime((browser, delegate)) {
RunLoop.main.run()
}
该库由 Bouke Haarsma 编写。