用于 Linux 的 Swift NetService (Bonjour / Zeroconf / mDNS) 实现

Build Status

该模块允许你在本地网络上发布自己的 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

此代码将发布一个新的 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()
}

浏览 NetService

此代码将开始搜索给定的服务类型。

let browser = NetServiceBrowser()
browser.delegate = ...
browser.searchForServices(ofType: "_airplay._tcp.", inDomain: "local.")
withExtendedLifetime((browser, delegate)) {
    RunLoop.main.run()
}

鸣谢

该库由 Bouke Haarsma 编写。