Bibliotecas WebSocket Kotlin: criando aplicações em tempo real
WebSocket é um protocolo que fornece uma conexão bidirecional permanente entre cliente e servidor. Diferente do HTTP, onde a requisição é enviada pelo cliente e o servidor responde, o WebSocket permite que o servidor inicie o envio de dados sem requisição. Isso o torna ideal para chats, jogos online, cotações de bolsa, notificações e outros sistemas que exigem transmissão instantânea de dados.
Kotlin, sendo uma linguagem JVM moderna, oferece várias bibliotecas poderosas para trabalhar com WebSocket. Neste artigo, veremos três opções mais populares: Ktor, OkHttp e kweb.
1. Ktor – framework para servidores e clientes
Ktor é um framework assíncrono da JetBrains, totalmente escrito em Kotlin. Ele suporta WebSocket tanto no lado do servidor quanto no lado do cliente. Ktor usa corrotinas, tornando o código conciso e eficiente.
Instalação (Gradle)
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("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")}Exemplo de servidor com Ktor
import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.routing.*import io.ktor.server.websocket.*import io.ktor.websocket.*
fun main() { embeddedServer(Netty, port = 8080) { install(WebSockets) routing { webSocket("/chat") { send(Frame.Text("Bem-vindo ao chat!")) for (frame in incoming) { if (frame is Frame.Text) { val text = frame.readText() send(Frame.Text("Você escreveu: $text")) } } } } }.start(wait = true)}Exemplo de cliente com Ktor
import io.ktor.client.*import io.ktor.client.engine.cio.*import io.ktor.client.plugins.websocket.*import io.ktor.websocket.*import kotlinx.coroutines.*
fun main() = runBlocking { val client = HttpClient(CIO) { install(WebSockets) } client.webSocket("ws://localhost:8080/chat") { send(Frame.Text("Olá, servidor!")) for (frame in incoming) { if (frame is Frame.Text) { println("Resposta: ${frame.readText()}") } } } client.close()}Vantagens do Ktor:
- Suporte completo a corrotinas Kotlin
- Processamento assíncrono sem bloqueios
- Sintaxe unificada para servidor e cliente
- Suporte nativo a SSL, compressão e outros protocolos
2. OkHttp – cliente HTTP/WebSocket confiável
OkHttp é uma biblioteca popular da Square, originalmente focada em HTTP, mas com excelente suporte a WebSocket. É usada no desenvolvimento Android e em aplicações servidoras. OkHttp funciona de forma síncrona e assíncrona, suporta reconexão e pool de conexões.
Instalação (Gradle)
dependencies { implementation("com.squareup.okhttp3:okhttp:4.12.0")}Exemplo de cliente com OkHttp
import okhttp3.*
fun main() { val client = OkHttpClient() val request = Request.Builder().url("ws://echo.websocket.org").build() val ws = client.newWebSocket(request, object : WebSocketListener() { override fun onOpen(webSocket: WebSocket, response: Response) { webSocket.send("Olá do OkHttp!") } override fun onMessage(webSocket: WebSocket, text: String) {