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:
- Criamos um cliente HTTP com suporte a WebSocket.
- Estabelecemos uma conexão com o servidor de teste
ws://echo.websocket.org. - Enviamos uma mensagem de texto.
- 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 Também na biblioteca
SpriteKit para Swift: guia completo com exemplos práticos
Aprendizado de Máquina em C++: Visão Geral das Principais Bibliotecas
SwiftyJSON para Swift: guia completo com exemplos práticos
prometheus/client_golang para Go: guia completo com exemplos práticos
Geração de Relatórios PDF em Kotlin: iText, Apache PDFBox, OpenPDF