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 反馈 — 无需本地设置。
此课程中的所有课时
- Ktor 项目设置:embeddedServer 与 Application 模块
- 路由与类型化参数
- 内容协商与 kotlinx.serialization
- 身份验证插件:JWT 与会话