Bibliotecas WebSocket Swift: Starscream e URLSessionWebSocketTask

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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



WebSocket é um protocolo que fornece uma conexão bidirecional contínua entre o cliente (aplicativo iOS/macOS) e o servidor. Ao contrário do HTTP, após o estabelecimento da conexão, os dados podem ser transmitidos em tempo real sem solicitações repetidas. Para Swift, existem duas abordagens principais: usar o URLSessionWebSocketTask nativo (disponível desde iOS 13/macOS 10.15) e a biblioteca de terceiros Starscream (que suporta versões mais antigas e oferece funcionalidades estendidas).



1. URLSessionWebSocketTask — WebSocket nativo em Swift



A partir do iOS 13 e macOS 10.15, a Apple adicionou suporte a WebSocket diretamente no URLSession. Isso significa que, para cenários básicos, não é necessário instalar dependências adicionais.



Exemplo de conexão e envio de mensagem



import Foundation

class WebSocketManager: NSObject { private var webSocketTask: URLSessionWebSocketTask? private let session = URLSession(configuration: .default) 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("Erro ao 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("Recebido: \\(text)") case .data(let data): print("Dados binários recebidos: \\(data.count) bytes") @unknown default: break } self?.receiveMessage() // continua ouvindo case .failure(let error): print("Erro ao receber: \\(error.localizedDescription)") } } } func disconnect() { webSocketTask?.cancel(with: .normalClosure, reason: nil) }}


Vantagens do URLSessionWebSocketTask

  • Sem dependências — tudo já está no sistema.
  • Integração nativa com tarefas em segundo plano e App Transport Security.
  • Suporte da Apple e atualizações junto com o SO.


Desvantagens

  • Versão mínima iOS 13 / macOS 10.15.
  • Falta de suporte nativo para reconexão e ping/pong (precisa ser implementado manualmente).
  • Menos flexibilidade nas configurações.


2. Starscream — Biblioteca WebSocket poderosa e flexível para Swift



Starscream é a biblioteca WebSocket de terceiros mais popular para Swift. Ela suporta iOS 8+, macOS 10.10+, além de watchOS e tvOS. O Starscream fornece um mecanismo de reconexão embutido, ping/pong automático e suporte a SSL/TLS.



Instalação via Swift Package Manager

// Em Package.swift ou via Xcode: File → Add Packages...// URL: https://github.com/daltoniam/Starscream.git// Versão: 4.0.0 ou superior


Exemplo de uso do Starscream



import Starscream

class StarscreamManager: WebSocketDelegate { var socket: WebSocket? func setupConnection() { var request = URLRequest(url: URL(string: "wss://echo.websocket.org")!) request.timeoutInterval = 5 socket = WebSocket(request: request) socket?.delegate = self socket?.connect() }\

Recommendations