WebSocket 对 URLSessionWebSocketTask 的封装

(macOS, iOS, iPadOS, tvOS 和 watchOS)

一个 WebSocket 客户端的具体实现,通过封装 Apple 的 URLSessionWebSocketTask 来实现。

WebSocket 的公共接口是一个简单的结构体,其公共方法以闭包的形式公开。这种设计的原因是为了方便在你的代码中注入伪造的 WebSocket 以进行测试。

实际的实现是 SystemWebSocket,但此类型不是公开可访问的。相反,你可以通过 WebSocket.system(url:)WebSocket.system(request:) 来访问它。SystemWebSocket 尽力模仿网络浏览器 WebSocket 的文档化行为。请将任何偏差报告为错误。

WebSocket 公开了一个简单的 API,并大量使用了 Swift Concurrency

安装

要使用 WebSocket,请将依赖项添加到你的 Package.swift 文件中

let package = Package(
  dependencies: [
    .package(
      url: "https://github.com/shareup/websocket-apple.git",
      from: "4.0.0"
    )
  ]
)

用法

// `WebSocket` starts connecting to the specified `URL` immediately.
let socket = WebSocket.system(url: url(49999))

// Wait for `WebSocket` to be ready to send and receive messages.
try await socket.open()

// Send a message to the server
try await socket.send(.text("hello"))

// Receive messages from the server
for await message in socket.messages {
    print(message)
}

try await socket.close()

测试

  1. 在你的终端中,导航到 websocket-apple 目录
  2. 使用 swift test 运行测试

声明

此库包含来自 WebSocketKitSwiftNIO 的代码,其使用取决于它们的许可证。