Kotlin中的WebSockets:从零开始构建实时应用

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Kotlin中的WebSockets:从理论到实时魔法



想象一下,你打开一个即时通讯应用,发送一条消息——它立即出现在对方的屏幕上。无需刷新页面,无需不断向服务器发送请求。这不是魔法,这是Kotlin中的WebSockets。如果你曾经想创建自己的聊天应用、实时通知系统或多人在线游戏——你来对地方了。



在本文中,我们将探讨WebSockets的工作原理,使用Ktor编写一个完整的Kotlin实时应用,并向你展示可以直接运行的代码。我们开始吧!



什么是WebSockets,为什么在Kotlin中需要它们?



WebSocket是一种在单个TCP连接上进行客户端与服务器之间双向通信的协议。与传统的HTTP不同(客户端总是发起请求),WebSocket允许服务器随时主动向客户端发送数据。



WebSocket比HTTP好在哪?

  • 即时性:数据在毫秒内送达
  • 节省流量:没有像HTTP那样多余的头部信息
  • 双向性:服务器可以主动发起发送
  • 持久连接:无需每次都重新建立连接


Kotlin凭借其协程和Ktor框架,非常适合处理WebSockets。异步、轻量级和富有表现力的语法——这就是为什么Kotlin WebSocket开发如此令人愉悦。



何时使用WebSockets?

以下是几个场景,其中使用WebSockets的Kotlin实时应用将不可或缺:

  • 聊天和即时通讯应用——实时消息传递
  • 通知系统——警报、弹出窗口、状态更新
  • 在线游戏——玩家同步
  • 股票行情——无需刷新即可更新价格
  • 协同编辑——类似Google Docs的功能


项目设置:Ktor + WebSockets

为了创建Kotlin WebSocket服务器,我们将使用Ktor——JetBrains开发的现代异步框架。让我们来配置项目。



步骤1:添加依赖

如果你使用Gradle(我相信你会的),请在build.gradle.kts中添加:

dependencies {    implementation("io.ktor:ktor-server-core:2.3.7")    implementation("io.ktor:ktor-server-netty:2.3.7")    implementation("io.ktor:ktor-server-websockets:2.3.7")    implementation("ch.qos.logback:logback-classic:1.4.14")}


步骤2:创建WebSocket服务器

现在让我们编写服务器本身。它将接受连接并将消息广播给所有连接的客户端——基本的聊天逻辑。

import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.websocket.*import io.ktor.websocket.*import kotlinx.coroutines.channels.Channelimport kotlinx.coroutines.launch

fun main() { val clients = mutableSetOf<WebSocketSession>()

embeddedServer(Netty, port = 8080) { install(WebSockets) { pingPeriod = 15_000 // 15秒 timeout = 15_000 maxFrameSize = Long.MAX_VALUE }

routing { webSocket("/chat") { // 添加客户端 clients.add(this) println("新连接:$this")

try { for (frame in incoming) { if (frame is Frame.Text) { val message = frame.readText() println("收到:$message")

// 发送给所有客户端

博客

书籍推荐