Biblioteca WebSocket Kotlin: Cliente e Servidor WebSocket Ktor

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 WebSocket



WebSocket é um protocolo que fornece uma conexão bidirecional contínua entre cliente e servidor. No ecossistema Kotlin, uma das bibliotecas mais poderosas e populares para trabalhar com WebSocket é o Ktor — um framework assíncrono criado pela JetBrains. O Ktor oferece suporte completo ao WebSocket tanto no lado do servidor quanto no lado do cliente, permitindo criar facilmente aplicações em tempo real: chats, notificações, jogos online, rastreadores de dados e muito mais.



Neste artigo, vamos detalhar como usar WebSocket em Kotlin com Ktor. Você aprenderá a configurar dependências, criar um servidor e cliente WebSocket, enviar e receber mensagens, além de tratar erros e fechamento de conexão.



Instalação e configuração



Para começar, adicione as dependências necessárias no arquivo build.gradle.kts (ou build.gradle). Se você usa Gradle, inclua os seguintes módulos:



// build.gradle.ktsdependencies {    // Parte do servidor    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")

// Parte do cliente implementation("io.ktor:ktor-client-core:2.3.0") implementation("io.ktor:ktor-client-cio:2.3.0") implementation("io.ktor:ktor-client-websockets:2.3.0")}


Para Maven, use artefatos semelhantes. Todos os módulos do Ktor versão 2.x.x suportam Kotlin Coroutines e funcionam em JVM, Android, iOS e outras plataformas.



Criação de um servidor WebSocket com Ktor



Vamos escrever um servidor echo simples, que recebe mensagens do cliente e as envia de volta. O servidor escutará na porta 8080.



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

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


Neste exemplo:

  • install(WebSockets) — instala o plugin WebSocket no servidor.
  • webSocket("/chat") — define o endpoint para conexão.
  • send() — envia uma mensagem ao cliente.
  • incoming — canal pelo qual os frames chegam do cliente.
  • Os frames podem ser de texto (Frame.Text), binários (Frame.Binary) ou de controle.


Criação de um cliente WebSocket com Ktor



Agora vamos escrever um cliente que se conecta ao nosso servidor, envia uma saudação e lê as respostas.



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

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

client.webSocket("ws://localhost:8080/chat") { // Lê a saudação val welcome = incoming.receive() as Frame.Text println("Servidor: ${welcome.readText()}")

// Envia uma mensagem send(Frame.Text("Olá, servidor!"))

// Aguarda a resposta echo val response = incoming.receive() as Frame.Text println("Servidor: ${response.readText()}")

// Fecha a conexão close() }

client.close()}


O cliente usa dois

Recommendations