unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
Web Socket

Web Socket #

WebSocket adalah protokol komunikasi yang menyediakan saluran komunikasi penuh-duplex (dua arah) melalui koneksi TCP. Ini memungkinkan interaksi waktu nyata antara server dan klien dengan latensi rendah, ideal untuk aplikasi seperti chat real-time, notifikasi, dan permainan online.

Di Kotlin, Anda dapat menggunakan berbagai pustaka dan framework untuk mengimplementasikan WebSocket. Pustaka yang umum digunakan termasuk Ktor, Spring Boot, dan Vert.x. Berikut adalah penjelasan mendetail tentang masing-masing dan contoh penggunaannya.

Ktor #

Ktor menyediakan dukungan WebSocket yang mudah digunakan dan diintegrasikan dalam aplikasi web.

Menambahkan Dependensi Ktor untuk WebSocket #

Untuk menggunakan WebSocket di Ktor, tambahkan dependensi berikut di file build.gradle.kts:

dependencies {
    implementation("io.ktor:ktor-server-websockets:2.2.4")
    implementation("io.ktor:ktor-server-netty:2.2.4")
    testImplementation("io.ktor:ktor-server-tests:2.2.4")
}

Contoh Penggunaan WebSocket dengan Ktor #

Berikut adalah contoh server WebSocket menggunakan Ktor:

import io.ktor.application.*
import io.ktor.features.ContentNegotiation
import io.ktor.http.*
import io.ktor.response.*
import io.ktor.routing.*
import io.ktor.server.engine.embeddedServer
import io.ktor.server.netty.Netty
import io.ktor.server.request.*
import io.ktor.server.websocket.*
import io.ktor.websocket.*
import kotlinx.coroutines.*
import java.time.Duration

fun Application.module() {
    install(WebSockets) {
        // Optional: configure WebSocket settings
        pingPeriod = Duration.ofSeconds(15)
    }

    routing {
        webSocket("/ws") { // WebSocket endpoint
            send("You are connected to the server") // Send initial message

            for (frame in incoming) {
                when (frame) {
                    is Frame.Text -> {
                        val receivedText = frame.readText()
                        println("Received: $receivedText")
                        send("Server received: $receivedText") // Echo message back to client
                    }
                }
            }
        }
    }
}

fun main() {
    embeddedServer(Netty, port = 8080, module = Application::module).start(wait = true)
}

Penjelasan:

  • install(WebSockets) { ... }: Mengaktifkan dukungan WebSocket di Ktor.
  • webSocket("/ws") { ... }: Menentukan endpoint WebSocket.
  • incoming: Mengambil frame yang masuk dari klien.
  • send("..."): Mengirim pesan ke klien.

Spring Boot #

Spring Boot juga menyediakan dukungan untuk WebSocket, yang memungkinkan Anda untuk menggunakan WebSocket di aplikasi Spring Boot.

Menambahkan Dependensi Spring Boot untuk WebSocket #

Tambahkan dependensi berikut di file build.gradle.kts:

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-websocket")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

Contoh Penggunaan WebSocket dengan Spring Boot #

Berikut adalah contoh server WebSocket menggunakan Spring Boot:

  1. Konfigurasi WebSocket

    import org.springframework.context.annotation.Configuration
    import org.springframework.web.socket.config.annotation.EnableWebSocket
    import org.springframework.web.socket.config.annotation.WebSocketConfigurer
    import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry
    
    @Configuration
    @EnableWebSocket
    class WebSocketConfig : WebSocketConfigurer {
        override fun registerWebSocketHandlers(registry: WebSocketHandlerRegistry) {
            registry.addHandler(ChatHandler(), "/ws/chat").setAllowedOrigins("*")
        }
    }
    
  2. Pengontrol WebSocket

    import org.springframework.stereotype.Component
    import org.springframework.web.socket.TextMessage
    import org.springframework.web.socket.WebSocketHandler
    import org.springframework.web.socket.WebSocketSession
    import org.springframework.web.socket.handler.TextWebSocketHandler
    
    @Component
    class ChatHandler : TextWebSocketHandler() {
    
        @Throws(Exception::class)
        override fun handleTextMessage(session: WebSocketSession, message: TextMessage) {
            val payload = message.payload
            println("Received: $payload")
            session.sendMessage(TextMessage("Server received: $payload"))
        }
    }
    

Penjelasan:

  • @EnableWebSocket: Menandai konfigurasi untuk WebSocket.
  • WebSocketHandler: Antarmuka untuk menangani pesan WebSocket.
  • handleTextMessage: Metode untuk menangani pesan teks dari klien.

Vert.x #

Vert.x mendukung WebSocket dengan cara yang sangat efisien dan skalabel.

Menambahkan Dependensi Vert.x untuk WebSocket #

Tambahkan dependensi berikut di file build.gradle.kts:

dependencies {
    implementation("io.vertx:vertx-web:4.4.4")
    implementation("io.vertx:vertx-core:4.4.4")
    testImplementation("io.vertx:vertx-junit5:4.4.4")
}

Contoh Penggunaan WebSocket dengan Vert.x #

Berikut adalah contoh server WebSocket menggunakan Vert.x:

import io.vertx.core.AbstractVerticle
import io.vertx.core.Vertx
import io.vertx.ext.web.Router
import io.vertx.ext.web.handler.StaticHandler
import io.vertx.ext.web.handler.sockjs.SockJSHandler

class WebSocketVerticle : AbstractVerticle() {
    override fun start() {
        val router = Router.router(vertx)

        router.route("/ws/*").handler(SockJSHandler.create(vertx).socketHandler { sockJS ->
            sockJS.handler { buffer ->
                val message = buffer.toString()
                println("Received: $message")
                sockJS.write("Server received: $message")
            }
        })

        vertx.createHttpServer().requestHandler(router).listen(8080) { res ->
            if (res.succeeded()) {
                println("Server is now listening on port 8080")
            } else {
                println("Failed to bind!")
            }
        }
    }
}

fun main() {
    Vertx.vertx().deployVerticle(WebSocketVerticle())
}

Penjelasan:

  • SockJSHandler.create(vertx): Menggunakan SockJS untuk WebSocket compatibility.
  • socketHandler { ... }: Menangani koneksi WebSocket.
  • sockJS.handler { buffer -> ... }: Menangani pesan yang diterima dan mengirim balasan.

Kesimpulan #

WebSocket memungkinkan komunikasi waktu nyata yang efisien dan dua arah antara klien dan server. Di Kotlin, Anda dapat menggunakan berbagai pustaka untuk mengimplementasikan WebSocket, termasuk:

  • Ktor: Framework modern yang fleksibel untuk aplikasi web dan layanan mikro.
  • Spring Boot: Framework komprehensif dengan dukungan WebSocket dan fitur enterprise.
  • Vert.x: Toolkit untuk aplikasi reaktif dengan dukungan WebSocket yang sangat skalabel.

Memilih pustaka atau framework yang tepat bergantung pada kebutuhan aplikasi Anda, seperti kemudahan penggunaan, fitur yang diperlukan, dan preferensi pribadi.

« Socket
Web Server »