WebSockets en Swift: Creando aplicaciones en tiempo real en una hora

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

¿Por qué WebSockets es un superpoder para el desarrollador de Swift?

\n\n

Imagine: abre un mensajero y los mensajes llegan al instante. Sin actualizaciones interminables de página, sin "tira para actualizar". Esta es la magia del tiempo real, y en Swift se implementa con WebSockets. Si hasta ahora solo ha usado solicitudes HTTP, se está perdiendo un mundo de posibilidades: chats en línea, cotizaciones bursátiles, notificaciones en vivo, juegos multijugador.

\n\n

En este artículo, analizaremos cómo agregar WebSockets a su aplicación Swift. Sin rodeos — solo código que puede copiar y ejecutar. Al final, podrá escribir su primer chat en tiempo real en menos de una hora. ¡Vamos allá!

\n\n

¿Qué son los WebSockets y por qué son mejores que la API REST?

\n\n

WebSockets es un protocolo de comunicación bidireccional entre cliente y servidor. A diferencia de REST, donde el cliente constantemente "molesta" al servidor con preguntas, WebSocket establece una conexión permanente. El propio servidor puede enviar datos cuando aparecen. Es como la diferencia entre llamar constantemente a un amigo "¿Ya llegaste?" y simplemente abrir la puerta y dejarlo entrar.

\n\n

Para el desarrollador de Swift, la principal ventaja es el ahorro de tráfico y recursos. En lugar de docenas de solicitudes HTTP por minuto — una sola conexión. Ideal para aplicaciones de trading, juegos en línea, monitoreo de sistemas.

\n\n

¿Cuándo usar WebSockets en iOS?

\n
    \n
  • Chats en línea — los mensajes deben entregarse al instante.
  • \n
  • Cotizaciones bursátiles — el precio cambia cada segundo.
  • \n
  • Juegos multijugador — sincronización de acciones de los jugadores.
  • \n
  • Notificaciones en tiempo real — nuevo "me gusta", pedido, mensaje.
  • \n
  • Aplicaciones IoT — datos de sensores que llegan continuamente.
  • \n
\n\n

Pero no use WebSockets en todas partes. Si solo necesita cargar una lista de productos — una solicitud HTTP GET normal funciona mejor. WebSocket se justifica cuando los datos se actualizan más de una vez cada 10 segundos.

\n\n

Configuración de WebSocket en Swift: desde cero hasta la primera conexión

\n\n

Swift tiene soporte integrado para WebSockets — la clase URLSessionWebSocketTask. No se necesitan bibliotecas de terceros. Escribamos un cliente simple.

\n\n

Paso 1. Crear una conexión WebSocket

\n\n
import Foundation\n\nclass WebSocketManager: NSObject {\n    private var webSocketTask: URLSessionWebSocketTask?\n    private let session: URLSession\n    \n    override init() {\n        self.session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue())\n        super.init()\n    }\n    \n    func connect(to url: URL) {\n        webSocketTask = session.webSocketTask(with: url)\n        webSocketTask?.resume()\n        print("Conexión WebSocket establecida")\n        receiveMessage()\n    }\n    \n    func disconnect() {\n        webSocketTask?.cancel(with: .normalClosure, reason: nil)\n        print("Conexión cerrada")\n    }\n}\n
\n\n

Este es un envoltorio básico. El método resume() inicia la conexión — sin él no pasará nada. Recuerde esto como un mantra: siempre llame a resume().

\n\n

Paso 2. Enviar y recibir mensajes

\n\n
extension WebSocketManager {\n    func sendMessage(_ text: String) {\n        let message = URLSessionWebSocketTask.Message.string(text)\n        webSocketTask?.send(message) { error in\n            if let error = error {\n                print("Error al enviar: \\(error.localizedDescription)")\n            }\n        }\n    }\n    \n    private func receiveMessage() {\n        webSocketTask?.receive { [weak self] result in\n            switch result {\n            case .success(let message):\n                switch message {\n                case .string(let text):\n                    print("Mensaje recibido: \\(text)")\n                

Blogs

Book Recommendations