WebSocket библиотеки Kotlin для создания реального времени в веб-приложениях

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

WebSocket библиотеки Kotlin: создание приложений реального времени

WebSocket – это протокол, обеспечивающий постоянное двустороннее соединение между клиентом и сервером. В отличие от HTTP, где запрос отправляется клиентом и сервер отвечает, WebSocket позволяет серверу инициировать отправку данных без запроса. Это делает его идеальным для чатов, онлайн-игр, биржевых котировок, уведомлений и других систем, где требуется мгновенная передача данных.

Kotlin, будучи современным языком JVM, предлагает несколько мощных библиотек для работы с WebSocket. В этой статье мы рассмотрим три наиболее популярных варианта: Ktor, OkHttp и kweb.

1. Ktor – фреймворк для серверов и клиентов

Ktor – это асинхронный фреймворк от JetBrains, который полностью написан на Kotlin. Он поддерживает WebSocket как на стороне сервера, так и на стороне клиента. Ktor использует корутины, что делает код лаконичным и эффективным.

Установка (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")
}

Пример сервера на 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("Добро пожаловать в чат!"))
                for (frame in incoming) {
                    if (frame is Frame.Text) {
                        val text = frame.readText()
                        send(Frame.Text("Вы написали: $text"))
                    }
                }
            }
        }
    }.start(wait = true)
}

Пример клиента на 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("Привет, сервер!"))
        for (frame in incoming) {
            if (frame is Frame.Text) {
                println("Ответ: ${frame.readText()}")
            }
        }
    }
    client.close()
}

Преимущества Ktor:

  • Полная поддержка корутин Kotlin
  • Асинхронная обработка без блокировок
  • Единый синтаксис для сервера и клиента
  • Встроенная поддержка SSL, сжатия и других протоколов

2. OkHttp – надёжный HTTP/WebSocket клиент

OkHttp – это популярная библиотека от Square, изначально ориентированная на HTTP, но с отличной поддержкой WebSocket. Она используется в Android-разработке и серверных приложениях. OkHttp работает синхронно и асинхронно, поддерживает переподключение и пул соединений.

Установка (Gradle)

dependencies {
    implementation("com.squareup.okhttp3:okhttp:4.12.0")
}

Пример клиента на 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("Привет от OkHttp!")
        }
        override fun onMessage(webSocket: WebSocket, text: String) {
            println("Получено: $text")
            webSocket.close(1000, "Завершение")
        }
        override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
            println("Ошибка: ${t.message}")
        }
    })
    // Держим приложение живым
    Thread.sleep(5000)
    client.dispatcher.executorService.shutdown()
}

Преимущества OkHttp:

  • Высокая производительность и надёжность
  • Автоматическое переподключение
  • Поддержка HTTP/2 и WebSocket
  • Широкая поддержка сообщества

3. kweb – библиотека для реактивных веб-приложений

kweb – это более специализированная библиотека, которая объединяет WebSocket с реактив

Рекомендаций