WebSocketActors 是一个客户端/服务器通信库,它允许 iOS、macOS、tvOS 或 watchOS 应用程序使用 Swift 的 分布式 actor 系统 与互联网上的服务器进行通信。 它是使用 Swagger/OpenAPI 编写服务器,然后在该 API 之上实现客户端应用程序的简化替代方案。 使用 WebSocketActors,您可以在客户端和服务器之间直接进行 Swift 函数调用。
此库基于 Apple 的 TicTacFish 示例代码,但添加了以下功能:
将包 https://github.com/samalone/websocket-actor-system
添加到您的 Xcode 项目,或添加
.package(url: "https://github.com/samalone/websocket-actor-system.git", from: "1.0.0"),
到您的 Package.swift
文件中的包依赖项。 然后添加
.product(name: "WebSocketActors", package: "websocket-actor-system"),
到您的包目标的 target 依赖项。
在您的共享库中,导入 WebSocketActors
并定义您的分布式 actor。
import Distributed
import WebSocketActors
extension NodeIdentity {
public static let server = NodeIdentity(id: "server")
}
extension ActorIdentity {
public static let greeter = ActorIdentity(id: "greeter", node: .server)
}
public distributed actor Greeter {
public typealias ActorSystem = WebSocketActorSystem
public distributed func greet(name: String) -> String {
return "Hello, \(name)!"
}
}
在您的服务器代码中,在后台启动服务器并确保服务器持续运行。
func main() async throws {
let address = ServerAddress(scheme: .insecure, host: "localhost", port: 8888)
let system = WebSocketActorSystem(id: .server)
try await system.runServer(at: address)
_ = system.makeLocalActor(id: .greeter) {
Greeter(actorSystem: system)
}
while true {
try await Task.sleep(for: .seconds(1_000_000))
}
}
在客户端上,连接到服务器并调用远程 actor。
func receiveGreeting() async throws {
let address = ServerAddress(scheme: .insecure, host: "localhost", port: 8888)
let system = WebSocketActorSystem()
try await system.connectClient(to: address)
let greeter = try Greeter.resolve(id: .greeter, using: system)
let greeting = try await greeter.greet(name: "Alice")
print(greeting)
}
WebSocketActors 的文档包括 API 文档和入门文章
有关使用 WebSocketActors 编写客户端/服务器应用程序的基本示例,请参阅我的 Monotonic 项目。 它实现了一个简单的 iOS 应用程序,该应用程序在“Increment”按钮上方显示一个计数器。 单击 increment 按钮会实时增加连接到服务器的所有客户端应用程序上的计数器。