0Pricing
Kotlin Academy · 课时

Ktor 项目设置:embeddedServer 与 Application 模块

启动 Ktor 应用,配置 Netty,并定义应用模块。

Ktor 项目设置:embeddedServer 与 Application 模块 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kotlin Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kotlin Academy 课程共包含 4 节课。

什么是 Ktor?

Ktor 是 JetBrains 用于构建服务器和客户端的异步 Kotlin 框架。它以协程为核心、基于插件,并且没有隐藏的魔法:您需要的每项功能都必须显式安装。Ktor 应用就是普通的 Kotlin 程序——无需 DI 容器。

添加 Ktor 依赖项

将核心服务器引擎(Netty 最常用)和核心 Ktor 服务器库添加到您的 build.gradle.kts 中:

dependencies {
    implementation("io.ktor:ktor-server-core:2.3.12")
    implementation("io.ktor:ktor-server-netty:2.3.12")
    implementation("ch.qos.logback:logback-classic:1.5.6") // logging
}

embeddedServer:最小入口点

启动 Ktor 服务器最简单的方式是使用 embeddedServer。传入引擎工厂、端口和配置代码块:

import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.routing.*
import io.ktor.server.response.*

fun main() {
    embeddedServer(Netty, port = 8080) {
        routing {
            get("/") { call.respondText("Hello, Ktor!") }
        }
    }.start(wait = true)
}

应用模块

对于较大的项目,请将配置拆分为模块——即 Application 上的扩展函数。模块负责安装插件和注册路由。这样可以让代码库更易于测试和组合:

fun Application.configureRouting() {
    routing {
        get("/health") { call.respondText("OK") }
    }
}

fun Application.configureSerialization() {
    install(ContentNegotiation) { json() }
}

从主函数调用模块

在 embeddedServer 代码块中调用模块函数,将它们组合起来:

fun main() {
    embeddedServer(Netty, port = 8080) {
        configureRouting()
        configureSerialization()
        configureSecurity()
    }.start(wait = true)
}

application.conf(HOCON 配置)

embeddedServer 的替代方案是使用 application.conf 文件(HOCON 格式),并通过 EngineMain 运行。配置文件指定入口模块和端口:

# application.conf
ktor {
    deployment { port = 8080 }
    application {
        modules = [ com.example.ApplicationKt.module ]
    }
}

EngineMain 与 embeddedServer

当您希望在代码中完全控制配置时(非常适合测试和简单应用),请使用 embeddedServer。当您希望在不重新编译的情况下使用特定于环境的配置时,请使用 EngineMain + application.conf。

ApplicationCall 对象

每个请求处理器都会接收一个 ApplicationCall。它提供对请求(call.request)和响应(call.response)的访问,以及 call.respondText() 和 call.respond() 等辅助函数。

环境与日志记录

在模块中通过 environment.config 访问环境配置。日志记录使用 SLF4J;将 logback.xml 添加到 src/main/resources/,即可配置日志级别和输出格式。

开发模式下的热重载

Ktor 支持在开发期间通过 development 模式标志进行热重载。您可以在 application.conf 中启用它,也可以通过编程方式启用:embeddedServer(Netty, port = 8080, developmentMode = true) { ... }。

项目结构约定

典型的 Ktor 项目布局:

  • Application.kt — main() 入口点
  • plugins/ — 每个 Application 扩展函数对应一个文件(路由、序列化、身份验证等)
  • routes/ — 按领域分组的路由定义
  • models/ — 数据类

快速检查

Ktor 中的 Application 模块函数有什么作用?

回顾:Ktor 项目设置

关键要点:

  • embeddedServer(Engine, port) { ... }.start(wait=true) 是最简单的入口点
  • 将配置拆分为 Application 上的模块扩展函数
  • 使用 EngineMain + application.conf 实现外部化配置
  • 每个请求处理器都通过 ApplicationCall 访问请求和响应
  • 将路由集中在 routes/ 包中,以便维护

常见问题解答

「Ktor 项目设置:embeddedServer 与 Application 模块」课时是免费的吗?

是的 — 「Ktor 项目设置:embeddedServer 与 Application 模块」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。

「Ktor 项目设置:embeddedServer 与 Application 模块」这节课中我会学到什么?

启动 Ktor 应用,配置 Netty,并定义应用模块。 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kotlin Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「Ktor 项目设置:embeddedServer 与 Application 模块」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Kotlin Academy 课中编写并运行代码吗?

能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Ktor 项目设置:embeddedServer 与 Application 模块
  2. 路由与类型化参数
  3. 内容协商与 kotlinx.serialization
  4. 身份验证插件:JWT 与会话
← 返回 Kotlin Academy