WebSocketActors

Swift Compatibility Platform Compatibility

macOS tests Ubuntu tests

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 按钮会实时增加连接到服务器的所有客户端应用程序上的计数器。

其他阅读材料