Bibliotecas WebSocket de Swift: Starscream y URLSessionWebSocketTask

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Bibliotecas WebSocket para Swift (iOS/macOS): Starscream y URLSessionWebSocketTask



WebSocket es un protocolo que proporciona comunicación full-duplex entre un cliente y un servidor a través de una única conexión TCP. En el ecosistema Swift (iOS/macOS), existen dos enfoques principales para trabajar con WebSocket: la implementación nativa URLSessionWebSocketTask (disponible desde iOS 13/macOS 10.15) y la popular biblioteca de terceros Starscream. Ambas permiten crear aplicaciones reactivas en tiempo real: chats, feeds de cotizaciones, juegos multijugador, etc.



Implementación nativa URLSessionWebSocketTask

Con el lanzamiento de iOS 13, Apple agregó soporte integrado para WebSocket en el framework Foundation. Esto elimina la necesidad de agregar dependencias de terceros si tu aplicación está orientada a versiones modernas del sistema operativo.



Características principales:

  • Trabajo completamente asíncrono mediante async/await o callbacks
  • Gestión automática del ciclo de vida de la conexión
  • Soporte para closeCode, closeReason para un cierre correcto
  • Integración nativa con URLSession (soporte para timeouts, políticas de caché)


Ejemplo de conexión y envío de mensaje:

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 al enviar: \\(error.localizedDescription)") } } } private func receiveMessage() { webSocketTask?.receive { [weak self] result in switch result { case .success(let message): switch message { case .string(let text): print("Recibido: \\(text)") case .data(let data): print("Datos binarios recibidos: \\(data)") @unknown default: fatalError() } // Seguimos escuchando self?.receiveMessage() case .failure(let error): print("Error al recibir: \\(error)") // Posible reconexión } } } func disconnect() { webSocketTask?.cancel(with: .normalClosure, reason: nil) }}


Starscream — una biblioteca flexible y probada

Starscream es una biblioteca WebSocket de código abierto para Swift, escrita por Dalton Cherry y mantenida por la comunidad. Funciona en iOS, macOS, tvOS y watchOS, desde versiones más antiguas (iOS 8+). Starscream proporciona más control sobre la conexión y admite funciones adicionales como compresión (permessage-deflate) y cabeceras personalizadas.



Instalación mediante Swift Package Manager:

// En Package.swift o mediante Xcode: File → Swift Packages → Add Package Dependency.package(url: "https://github.com/daltoniam/Starscream.git", from: "4.0.0")


Características principales:

  • Soporte para WebSocketDelegate para todos los eventos (conexión, recepción de datos, errores, desconexión)
  • Gestión manual de pings/pongs para mantener la conexión
  • Posibilidad de enviar datos binarios (Data) y cadenas (String/UTF-8)
  • Soporte para SSL/TLS y certificados autofirmados

Recommendations