Starscream — Biblioteca WebSocket para Swift (iOS/macOS)
Starscream es una biblioteca ligera pero potente para trabajar con el protocolo WebSocket en plataformas Apple. Está escrita completamente en Swift, no tiene dependencias externas y es compatible con iOS, macOS, tvOS y watchOS. Si necesitas organizar comunicación bidireccional en tiempo real entre una aplicación móvil y un servidor (chat, notificaciones, juegos en línea), Starscream es una excelente opción.
Características principales
- Soporte completo del estándar RFC 6455 (WebSocket Protocol).
- Funciona con conexiones seguras
wss://y conexiones normalesws://. - Reconexión automática en caso de interrupción de la conexión.
- Soporte de tramas: texto, datos binarios (Data), ping/pong.
- Integración sencilla mediante CocoaPods, Swift Package Manager o Carthage.
- Compatibilidad con Combine (iOS 13+) y Swift Concurrency (async/await).
Instalación mediante Swift Package Manager (recomendado)
Añade el paquete en Xcode: File → Add Packages e introduce la URL del repositorio:
https://github.com/daltoniam/Starscream.gitSelecciona la versión (la última estable) y añádelo a tu target.
Ejemplo básico de conexión
Vamos a crear un cliente WebSocket simple que se conecta al servidor y muestra los mensajes recibidos.
import Starscream
class WebSocketManager { var socket: WebSocket? func connect() { var request = URLRequest(url: URL(string: "wss://echo.websocket.org")!) request.timeoutInterval = 5 socket = WebSocket(request: request) socket?.delegate = self socket?.connect() }}
extension WebSocketManager: WebSocketDelegate { func didReceive(event: WebSocketEvent, client: WebSocket) { switch event { case .connected(let headers): print("¡Conectado! Cabeceras: \\(headers)") case .disconnected(let reason, let code): print("Desconectado: \\(reason) (código: \\(code))") case .text(let string): print("Texto recibido: \\(string)") case .binary(let data): print("Datos binarios recibidos: \\(data.count) bytes") case .ping(let data): print("Ping: \\(data?.hexString ?? "sin datos")") case .pong(let data): print("Pong: \\(data?.hexString ?? "sin datos")") case .viabilityChanged(let isViable): print("Conexión activa: \\(isViable)") case .reconnectSuggested(let shouldReconnect): print("Se sugiere reconexión: \\(shouldReconnect)") case .cancelled: print("Conexión cancelada") case .error(let error): print("Error: \\(error?.localizedDescription ?? "error desconocido")") } }}Envío de datos
Starscream permite enviar tanto cadenas de texto como datos binarios. Ejemplo de envío de JSON:
func sendMessage(text: String) { let message: [String: Any] = [ "type": "chat", "content": text, "timestamp": Int(Date().timeIntervalSince1970) ] if let jsonData = try? JSONSerialization.data(withJSONObject: message, options: []), let jsonString = String(data: jsonData, encoding: .utf8) { socket?.write(string: jsonString) }}
// Envío de archivo binario (por ejemplo, una imagen)func sendImage(data: Data) { socket?.write(data: data)}Trabajar con Combine (iOS 13+)
Para programación reactiva, Starscream proporciona un Publisher:
import Combine
class CombineViewModel: ObservableObject { @Published var lastMessage: String = "" private var socket: WebSocket? private var cancellables = Set<AnyCancellable>() func setup() { var req También en la biblioteca
Trabajo con Excel en TypeScript: bibliotecas, ejemplos y herramientas
Limitación de Tasa en TypeScript: bibliotecas, herramientas y ejemplos de implementación
Autorización y autenticación en C++: bibliotecas, ejemplos e implementación