Biblioteca WebSocket Kotlin: ktor-client-websockets para tempo real

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

Biblioteca WebSocket Kotlin: ktor-client-websockets



No desenvolvimento web moderno, a troca de dados em tempo real é cada vez mais necessária: chats online, notificações, cotações de ações, jogos multiplayer. Para Kotlin, uma das bibliotecas mais poderosas e nativas para trabalhar com o protocolo WebSocket é ktor-client-websockets — parte do ecossistema Ktor (Kotlin HTTP client).



Neste artigo, vamos detalhar como conectar e usar WebSocket em Kotlin com Ktor. Você aprenderá como instalar a biblioteca, estabelecer uma conexão, enviar e receber mensagens, além de tratar erros e fechamento de conexão.



O que é WebSocket e para que serve?

WebSocket é um protocolo que fornece uma conexão bidirecional persistente entre um cliente (por exemplo, um aplicativo Android ou servidor) e um servidor. Diferente do HTTP, onde o cliente inicia uma requisição a cada vez, o WebSocket permite que o servidor envie dados ao cliente instantaneamente, assim que eles surgem. É ideal para:

  • chats e mensageiros;
  • notificações e feeds de eventos;
  • jogos e editores colaborativos;
  • tickers financeiros e trading.


Instalação da biblioteca ktor-client-websockets

Para começar, adicione a dependência ao seu build.gradle.kts (projeto em Kotlin/JVM ou Kotlin Multiplatform).



// build.gradle.ktsdependencies {    implementation("io.ktor:ktor-client-core:2.3.7")    implementation("io.ktor:ktor-client-cio:2.3.7") // ou outro engine    implementation("io.ktor:ktor-client-websockets:2.3.7")}


Se você estiver usando Kotlin Multiplatform, certifique-se de adicionar o módulo para cada plataforma (por exemplo, ktor-client-okhttp para Android).



Criação do cliente WebSocket

A classe principal para trabalhar com WebSocket é HttpClient com o plugin WebSockets. Vejamos um exemplo simples de conexão a um servidor WebSocket.



import io.ktor.client.*import io.ktor.client.plugins.websocket.*import io.ktor.websocket.*

suspend fun main() { val client = HttpClient { install(WebSockets) }

client.webSocket("ws://echo.websocket.org") { // Envia uma mensagem send(Frame.Text("Olá, WebSocket!"))

// Recebe a resposta for (frame in incoming) { when (frame) { is Frame.Text -> { println("Recebido: ${frame.readText()}") } else -> println("Outro tipo de frame: $frame") } } }

client.close()}


Neste código, nós:

  1. Criamos um cliente HTTP com suporte a WebSocket.
  2. Estabelecemos uma conexão com o servidor de teste ws://echo.websocket.org.
  3. Enviamos uma mensagem de texto.
  4. Lemos os frames recebidos e os exibimos no console.


Tratamento de erros e fechamento da conexão

Em aplicações reais, é importante tratar exceções e fechar a conexão corretamente. Use try-catch e finally.



import io.ktor.client.*import io.ktor.client.plugins.websocket.*import io.ktor.websocket.*import kotlinx.coroutines.*

suspend fun main() = coroutineScope { val client = HttpClient { install(WebSockets) }

try { client.webSocket("ws://your-server.com/ws") { // Envio send(Frame.Text("Ping"))

// Recebimento com timeout withTimeout(5000) { for (frame in incoming) { if (frame is Frame.Text) { println("Resposta: ${frame.readText()}") } } } } } catch (e: Exception) { println("Erro WebSocket: ${e.message}") } finally { cli

Recommendations