Biblioteca WebSocket Swift: Starscream para iOS/macOS

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
```html

Starscream — Biblioteca WebSocket para Swift (iOS/macOS)



Starscream é uma biblioteca leve, mas poderosa, para trabalhar com o protocolo WebSocket nas plataformas Apple. Escrita totalmente em Swift, não possui dependências externas e suporta iOS, macOS, tvOS e watchOS. Se você precisa organizar comunicação bidirecional em tempo real entre um aplicativo móvel e um servidor (chat, notificações, jogos online) — Starscream será uma excelente escolha.



Principais recursos

  • Suporte completo ao padrão RFC 6455 (WebSocket Protocol).
  • Funciona através de conexão segura wss:// e conexão normal ws://.
  • Reconexão automática em caso de queda de conexão.
  • Suporte a frames: texto, dados binários (Data), ping/pong.
  • Integração simples via CocoaPods, Swift Package Manager ou Carthage.
  • Compatibilidade com Combine (iOS 13+) e Swift Concurrency (async/await).


Instalação via Swift Package Manager (recomendado)

Adicione o pacote no Xcode: File → Add Packages e cole a URL do repositório:

https://github.com/daltoniam/Starscream.git

Selecione a versão (a última estável) e adicione ao seu target.



Exemplo básico de conexão

Vamos criar um cliente WebSocket simples que se conecta ao servidor e exibe as mensagens recebidas.

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! Headers: \\(headers)") case .disconnected(let reason, let code): print("Desconectado: \\(reason) (código: \\(code))") case .text(let string): print("Texto recebido: \\(string)") case .binary(let data): print("Dados binários recebidos: \\(data.count) bytes") case .ping(let data): print("Ping: \\(data?.hexString ?? "sem dados")") case .pong(let data): print("Pong: \\(data?.hexString ?? "sem dados")") case .viabilityChanged(let isViable): print("Conexão ativa: \\(isViable)") case .reconnectSuggested(let shouldReconnect): print("Reconexão sugerida: \\(shouldReconnect)") case .cancelled: print("Conexão cancelada") case .error(let error): print("Erro: \\(error?.localizedDescription ?? "erro desconhecido")") } }}


Envio de dados

Starscream permite enviar tanto strings de texto quanto dados binários. Exemplo de envio 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)    }}

// Envio de arquivo binário (exemplo: imagem)func sendImage(data: Data) { socket?.write(data: data)}


Trabalhando com Combine (iOS 13+)

Para programação reativa, o Starscream fornece um Publisher:

import Combine

class CombineViewModel: ObservableObject { @Published var lastMessage: String = "" private var socket: WebSocket? private var cancellables = Set<AnyCancellable>() func setup() { var req ```

Recommendations