¿Por qué WebSockets es un superpoder para el desarrollador de Swift?
\n\nImagine: 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\nEn 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\nWebSockets 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\nPara 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
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\nConfiguración de WebSocket en Swift: desde cero hasta la primera conexión
\n\nSwift tiene soporte integrado para WebSockets — la clase URLSessionWebSocketTask. No se necesitan bibliotecas de terceros. Escribamos un cliente simple.
Paso 1. Crear una conexión WebSocket
\n\nimport 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\nEste 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().
Paso 2. Enviar y recibir mensajes
\n\nextension 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