Swift WebSocket 库:Starscream 和 URLSessionWebSocketTask

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift(iOS/macOS)的 WebSocket 库:Starscream 和 URLSessionWebSocketTask



WebSocket 是一种通过单个 TCP 连接在客户端和服务器之间提供全双工通信的协议。在 Swift(iOS/macOS)生态系统中,有两种主要方法可用于处理 WebSocket:原生实现 URLSessionWebSocketTask(自 iOS 13/macOS 10.15 起可用)和流行的第三方库 Starscream。两者都允许创建实时响应式应用程序:聊天、行情推送、多人游戏等。



原生实现 URLSessionWebSocketTask

随着 iOS 13 的发布,Apple 在 Foundation 框架中添加了内置的 WebSocket 支持。如果您的应用程序面向现代操作系统版本,这可以省去引入第三方依赖项的需要。



主要功能:

  • 通过 async/await 或回调实现完全异步操作
  • 自动管理连接生命周期
  • 支持 closeCode、closeReason 以实现正确关闭
  • 与 URLSession 的内置集成(支持超时、缓存策略)


连接和发送消息示例:

import Foundation

class WebSocketManager { private var webSocketTask: URLSessionWebSocketTask? private let session = URLSession.shared func connect() { guard let url = URL(string: "wss://echo.websocket.org") else { return } webSocketTask = session.webSocketTask(with: url) webSocketTask?.resume() receiveMessage() } func sendMessage(_ text: String) { let message = URLSessionWebSocketTask.Message.string(text) webSocketTask?.send(message) { error in if let error = error { print("发送错误:\\(error.localizedDescription)") } } } private func receiveMessage() { webSocketTask?.receive { [weak self] result in switch result { case .success(let message): switch message { case .string(let text): print("收到:\\(text)") case .data(let data): print("收到二进制数据:\\(data)") @unknown default: fatalError() } // 继续监听 self?.receiveMessage() case .failure(let error): print("接收错误:\\(error)") // 可能需要重新连接 } } } func disconnect() { webSocketTask?.cancel(with: .normalClosure, reason: nil) }}


Starscream — 灵活且经过验证的库

Starscream 是一个用于 Swift 的开源 WebSocket 库,由 Dalton Cherry 编写并由社区维护。它适用于 iOS、macOS、tvOS 和 watchOS,从较旧的版本(iOS 8+)开始。Starscream 提供对连接的更多控制,并支持附加功能,例如压缩(permessage-deflate)和自定义标头。



通过 Swift Package Manager 安装:

// 在 Package.swift 中或通过 Xcode:File → Swift Packages → Add Package Dependency.package(url: "https://github.com/daltoniam/Starscream.git", from: "4.0.0")


主要功能:

  • 支持 WebSocketDelegate 处理所有事件(连接、数据接收、错误、断开连接)
  • 手动管理 ping/pong 以保持连接
  • 能够发送二进制数据(Data)和字符串(String/UTF-8)
  • 支持 SSL/TLS 和自签名证书

推荐