Por que WebSockets são um superpoder para desenvolvedores Swift?
\n\nImagine: você abre um mensageiro e as mensagens chegam instantaneamente. Sem atualizações infinitas de página, sem "puxe para atualizar". Isso é a magia do tempo real, e em Swift ela é implementada com WebSockets. Se você ainda usa apenas requisições HTTP, está perdendo um mundo de possibilidades: chats online, cotações de bolsa, notificações ao vivo, jogos multijogador.
\n\nNeste artigo, vamos abordar como adicionar WebSockets ao seu aplicativo Swift. Sem enrolação — apenas código que você pode copiar e executar. Ao final, você será capaz de escrever seu primeiro chat em tempo real em menos de uma hora. Vamos lá!
\n\nO que são WebSockets e por que são melhores que REST API?
\n\nWebSockets são um protocolo de comunicação bidirecional entre cliente e servidor. Diferente do REST, onde o cliente constantemente "puxa" o servidor com perguntas, o WebSocket estabelece uma conexão permanente. O próprio servidor pode enviar dados quando eles surgem. É como a diferença entre ligar constantemente para um amigo perguntando "Você já chegou?" e simplesmente abrir a porta e deixá-lo entrar.
\n\nPara o desenvolvedor Swift, a principal vantagem é a economia de tráfego e recursos. Em vez de dezenas de requisições HTTP por minuto — uma única conexão. Ideal para aplicações de trading, jogos online, monitoramento de sistemas.
\n\nQuando usar WebSockets no iOS?
\n- \n
- Chats online — as mensagens devem ser entregues instantaneamente. \n
- Cotações de bolsa — o preço muda a cada segundo. \n
- Jogos multijogador — sincronização das ações dos jogadores. \n
- Notificações em tempo real — novo like, pedido, mensagem. \n
- Aplicações IoT — dados de sensores chegam continuamente. \n
Mas não use WebSockets em tudo. Se você precisa apenas carregar uma lista de produtos — um HTTP GET comum resolve melhor. O WebSocket é justificado quando os dados são atualizados mais de uma vez a cada 10 segundos.
\n\nConfiguração do WebSocket em Swift: do zero à primeira conexão
\n\nO Swift tem suporte nativo a WebSockets — a classe URLSessionWebSocketTask. Nenhuma biblioteca de terceiros é necessária. Vamos escrever um cliente simples.
Passo 1. Criando a conexão 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("Conexão WebSocket estabelecida")\n receiveMessage()\n }\n \n func disconnect() {\n webSocketTask?.cancel(with: .normalClosure, reason: nil)\n print("Conexão fechada")\n }\n}\n\n\nEste é um wrapper básico. O método resume() inicia a conexão — sem ele nada acontece. Lembre-se disso como um mantra: sempre chame resume().
Passo 2. Enviando e recebendo mensagens
\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("Erro ao 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("Mensagem recebida: \\(text)")\n