bonjour-http-server 0.7.8

bonjour-http-server 0.7.8

维护者:Satoshi_Nakajima.



  • Satoshi Nakajima

bonjour-http

这个库可以让您在 Apple 设备(Mac、iPhone、iPad 和 Apple TV)之间轻松使用 Bonjour 连接,并以 HTTP 作为应用层协议。

它还包含一个 http-call 包装器,允许客户端调用服务器端特定函数,并异步接收结果。

// Client-side
connection.call("greeting", params: ["message": "How are you?"]) { (res, json) in
    if res.isSuccess {
        // process the response
        ...
    }
}
// Server-side
func service(_ service: BonjourService, onCall: String, params: [String : Any], 
             socket: GCDAsyncSocket, context: String) {
    switch(onCall) {
    case "greeting":
        service.respond(to: socket, context: context, 
                        result: ["message": "I'm fine, thank you."])
    default:
        // handle error
        ...
    }
}

为什么使用 HTTP?

Bonjour 是一种在本地网络中建立设备连接的绝佳机制,但它并没有指定如何发送各种类型的数据,如文本、JSON数据和图像。使用 HTTP 是合理的,因为 HTTP 不仅在浏览器和网络服务器之间使用广泛,也在应用程序和 web 服务中广泛使用。

客户端类

BonjourBrowser 允许应用程序发现具有特定类型的 Bonjour 服务(NetService 对象),并将它们呈现给用户从中选择(注意:此库不包含 UI 代码)。

BonjourConnection 允许应用程序在用户选择的一个 Bonjour 服务之间建立连接。应用程序调用其 send(req:callback:) 方法或 call(req:name:params:callback) 方法将 HTTP 请求发送到连接的服务器,然后异步接收响应。

BonjourConnectionDelegate 是一个应用程序可以实现的协议,以接收由 callback 函数未处理的 sendcall 方法的响应。

BonjourRequest 代表一个 HTTP 请求,应用程序可以使用已建立的 BonjourConnection 创建和发送。

BonjourResponse 代表从 Bonjour 服务器返回的 HTTP 响应。

服务器类

BonjourService 允许应用程序发布特定类型的Bonjour服务。应用程序需要定义一个代表HTTP服务器的类,该类实现 BonjourServiceDelegate 协议。

BonjourRequest 表示从客户端应用程序发送的HTTP请求。服务器通过 BonjourServiceDelegate 协议的 service:onRequest:socket:context 方法接收它。

BonjourResponse 表示HTTP响应,服务器应用程序创建该HTTP响应作为对客户端应用程序HTTP请求的响应。

以下是一个示例,它将在根目录 ("/") 返回 "Hello World!" 页面。

class SampleHTTPServer : NSObject, BonjourServiceDelegate {
    func service(_ service: BonjourService, onRequest req: BonjourRequest, socket: GCDAsyncSocket, context: String) {
        var res = BonjourResponse(context: context)
        switch(req.path) {
        case "/":
            res.setBody(string: "<html><body>Hello World!</body></html>")
        default:
            res.setBody(string: "<html><body>Page Not Found</body></html>")
            res.statusText = "404 Not Found"
        }
        service.send(responce: res, to: socket)
    }
}

CocoaPods

该仓库生成两个 CocoaPods。

仅服务器版本适用于针对 MacOS 10.14 的应用程序。客户端代码使用 ObservableObject 协议和 @Published 前缀以支持 SwiftUI,这是一种在 MacOS 10.15 及更高版本上可用的技术。