[kotlin] Ktor Core의 WebSocket 통신 구현

이번에는 Kotlin 기반의 Ktor Core 라이브러리를 사용하여 WebSocket 통신을 구현하는 방법에 대해 알아보겠습니다.

1. Ktor Core 및 WebSocket 모듈 추가

먼저, 프로젝트의 build.gradle.kts 파일에 아래와 같이 Ktor CoreWebSocket 모듈을 추가합니다.

dependencies {
    implementation("io.ktor:ktor-server-core:1.6.2")
    implementation("io.ktor:ktor-websockets:1.6.2")
}

위의 코드를 추가한 후, Gradle 프로젝트를 새로 고쳐 의존성을 다운로드합니다.

2. WebSocket 핸들러 구현

다음으로는 WebSocket 핸들러를 구현합니다. 아래는 간단한 예제 코드입니다.

import io.ktor.application.*
import io.ktor.http.cio.websocket.*
import io.ktor.routing.*
import io.ktor.websocket.*

fun Application.main() {
    install(WebSockets)

    routing {
        webSocket("/chat") {
            for (frame in incoming) {
                when (frame) {
                    is Frame.Text -> {
                        val text = frame.readText()
                        // Handle text message
                    }
                }
            }
        }
    }
}

위의 코드에서는 /chat 엔드포인트에 대한 WebSocket 핸들러를 구현했습니다. 클라이언트로부터 수신된 프레임을 처리할 수 있도록 핸들러를 구성하였습니다.

3. 클라이언트 구현

마지막으로, WebSocket 클라이언트를 구현해야 합니다.

import io.ktor.client.*
import io.ktor.client.features.websocket.*
import io.ktor.http.cio.websocket.*
import io.ktor.http.cio.websocket.Frame
import kotlinx.coroutines.*

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

    runBlocking {
        client.ws(method = io.ktor.http.HttpMethod.Get, host = "localhost", port = 8080, path = "/chat") {
            // Handle WebSocket connection
            send(Frame.Text("Hello, server!"))
            for (message in incoming) {
                when (message) {
                    is Frame.Text -> {
                        val text = message.readText()
                        // Handle text message from server
                    }
                }
            }
        }
    }
}

위의 코드는 Ktor 클라이언트를 사용하여 서버에 있는 WebSocket 엔드포인트에 연결하고, 메시지를 수신하는 간단한 예제입니다.

결론

Kotlin 기반의 Ktor Core 라이브러리를 사용하여 WebSocket 통신을 구현하는 방법에 대해 알아보았습니다. 이제 이를 활용하여 실시간 통신 기능을 구현하거나, 다양한 응용프로그램에서 사용할 수 있습니다.

더 자세한 내용은 Ktor 공식 문서를 참고하시기 바랍니다.