Sublimation

SublimationBonjour

使用 Bonjour 配合 Sublimation,以便自动发现您的 Swift 服务器

SwiftPM Twitter GitHub GitHub issues GitHub Workflow Status

Codecov CodeFactor Grade codebeat badge Code Climate maintainability Code Climate technical debt Code Climate issues

目录

简介

sequenceDiagram
  participant Server as Hummingbird/Vapor Server
  participant BonjourSub as BonjourSublimatory
  participant NWListener as NWListener
  participant Network as Local Network
  participant BonjourClient as BonjourClient
  participant App as iOS/watchOS App
  
  Server->>BonjourSub: Start server, provide IP addresses,<br/>hostnames, port, and protocol (http/https)
  BonjourSub->>NWListener: Configure with server information
  NWListener->>Network: Advertise service:<br/>1. Send encoded server data<br/>2. Use Text Record for additional info
  App->>BonjourClient: Request server URL
  BonjourClient->>Network: Search for advertised services
  Network-->>BonjourClient: Return advertised service information
  BonjourClient->>BonjourClient: 1. Receive and decode server data<br/>2. Parse Text Record
  BonjourClient-->>App: Return AsyncStream<URL><br/>or first available URL
  App->>Server: Connect to server using discovered URL
加载

当 Swift 服务器启动时,它会告知 Sublimation 可用于访问服务器的 IP 地址或主机名(包括端口号以及是否使用 https 或 http)。 这被称为 BonjourSublimatory。 然后 BonjourSublimatory 使用 NWListener 通过以 Protocol Buffers 编码的数据以及 Text Record 中公布的信息来广播此信息。

iPhone 或 Apple Watch 然后使用 BonjourClient 来获取 URLAsyncStream (通过 BonjourClient.urls) 或直接获取可用的 BonjourClient.first()

要求

Apple 平台

Linux

安装

要使用 SPM 将 SublimationBonjour 集成到您的应用程序中,请在您的 Package.swift 文件中指定它

let package = Package(
  ...
  dependencies: [
    .package(url: "https://github.com/brightdigit/SublimationBonjour.git", from: "1.0.0")
  ],
  targets: [
      .target(
          name: "YourServerApp",
          dependencies: [
            .product(name: "SublimationBonjour", package: "SublimationBonjour"), ...
          ]),
      ...
  ]
)

用法

设置您的服务器

创建一个带有以下内容的 BindingConfiguration

let bindingConfiguration = BindingConfiguration(
  host: ["Leo's-Mac.local", "192.168.1.10"],
  port: 8080
  isSecure: false
)

使用该 BindingConfiguration 创建一个 BonjourSublimatory,并包含您服务器的 logger。 然后将其附加到 Sublimation 对象

let bonjour = BonjourSublimatory(
  bindingConfiguration: bindingConfiguration,
  logger: app.logger
)
let sublimation = Sublimation(sublimatory : bonjour)

您也可以只创建一个 Sublimation 对象

let sublimation = Sublimation(
  bindingConfiguration: bindingConfiguration,
  logger: app.logger
)

设置您的客户端

在设备上,创建一个 BonjourClient,并通过 BonjourClient.urls 获取 URL 对象的 AsyncStream,或者直接使用 BonjourClient.first() 请求第一个 URL。

let client = BonjourClient(logger: app.logger)
let hostURL = await client.first()

文档

要了解更多信息,请查看完整的文档

许可证

此代码在 MIT 许可证下分发。 有关更多信息,请参见 LICENSE 文件。