WebSockets em Swift: Criando aplicações em tempo real em uma hora

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

Por que WebSockets são um superpoder para desenvolvedores Swift?

\n\n

Imagine: 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\n

Neste 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\n

O que são WebSockets e por que são melhores que REST API?

\n\n

WebSockets 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\n

Para 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\n

Quando 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
\n\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\n

Configuração do WebSocket em Swift: do zero à primeira conexão

\n\n

O Swift tem suporte nativo a WebSockets — a classe URLSessionWebSocketTask. Nenhuma biblioteca de terceiros é necessária. Vamos escrever um cliente simples.

\n\n

Passo 1. Criando a conexão 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("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\n

Este é 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().

\n\n

Passo 2. Enviando e recebendo mensagens

\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("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                

Blogs

Book Recommendations