WebSocket em Kotlin: criando aplicações em tempo real do zero

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

Introdução: Por que WebSocket e Kotlin são a Combinação Perfeita para Tempo Real

Aplicações web modernas exigem cada vez mais transmissão instantânea de dados: desde chats e jogos online até cotações de ações e sistemas de monitoramento. O HTTP tradicional com seu modelo de requisição-resposta é ineficiente para tais tarefas — ele cria atrasos e tráfego redundante. É aqui que o WebSocket vem ao resgate — um protocolo que fornece uma conexão bidirecional permanente entre cliente e servidor.

Kotlin com sua sintaxe concisa, compatibilidade total com Java e suporte poderoso para corrotinas é idealmente adequado para criar aplicações em tempo real. O framework Ktor da JetBrains fornece suporte nativo a WebSocket, permitindo que você escreva código performático e seguro em apenas algumas linhas.

Neste artigo, vamos detalhar como criar uma aplicação completa em tempo real em Kotlin usando WebSocket. Você aprenderá:

  • Como configurar um servidor WebSocket no Ktor
  • Como conectar-se a ele a partir de um navegador ou aplicativo móvel
  • Como organizar a troca de mensagens em tempo real
  • Quais padrões e abordagens usar para escalabilidade

1. Fundamentos do WebSocket e Suas Vantagens no Kotlin

O que é WebSocket?

WebSocket é um protocolo que funciona sobre TCP. Após estabelecer uma conexão através de um handshake HTTP (upgrade), o cliente e o servidor podem trocar dados em ambas as direções sem requisições repetidas. Isso reduz drasticamente a latência e diminui a carga na rede.

Por que Kotlin?

  • Corrotinas — permitem lidar com milhares de conexões WebSocket simultâneas sem bloquear threads.
  • Ktor — um framework assíncrono leve com suporte nativo a WebSocket.
  • Segurança de tipos — erros em tempo de compilação, não em tempo de execução.
  • Multiplataforma — o mesmo código pode rodar em JVM, JS e Native.

2. Criando um Servidor WebSocket no Ktor

Passo 1: Configuração do Projeto

Adicione as dependências ao build.gradle.kts:

dependencies {
    implementation("io.ktor:ktor-server-core:2.3.0")
    implementation("io.ktor:ktor-server-netty:2.3.0")
    implementation("io.ktor:ktor-server-websockets:2.3.0")
    implementation("ch.qos.logback:logback-classic:1.4.11")
}

Passo 2: Servidor Básico com WebSocket

import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.websocket.*
import io.ktor.websocket.*
import kotlinx.coroutines.delay

fun main() {
    embeddedServer(Netty, port = 8080) {
        install(WebSockets)
        webSocket("/chat") {
            send(Frame.Text("Bem-vindo ao chat!"))
            for (frame in incoming) {
                if (frame is Frame.Text) {
                    val text = frame.readText()
                    println("Recebido: $text")
                    send(Frame.Text("Eco: $text"))
                }
            }
        }
    }.start(wait = true)
}

Este código cria um servidor echo simples. Ao conectar, o cliente recebe uma saudação, e cada uma de suas mensagens é retornada com o prefixo "Eco:".

Passo 3: Lidando com Múltiplos Clientes e Broadcast

Para um chat em tempo real, você precisa armazenar uma lista de sessões ativas:

import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.websocket.*
import io.ktor.websocket.*
import kotlinx.coroutines.channels.ConcurrentHashMap

val clients = ConcurrentHashMap<String, WebSocketSession>()

fun main() {
    embeddedServer(Netty, port = 8080) {
        install(WebSockets)
        webSocket("/chat") {
            val userName = "User_${System.currentTimeMillis()}"
            clients[userName] = this
            try {                

Blogs

Book Recommendations