Ktor 框架简介与基本使用
1. Ktor 框架简介
Ktor 是由 JetBrains 官方推出的轻量级 Kotlin 异步框架,专为构建高性能 Web 应用、HTTP 服务和微服务而设计。其核心特性包括:
- 纯 Kotlin 开发:完全基于 Kotlin 协程,支持函数式编程风格
- 模块化设计:通过插件(Features)灵活扩展功能(如路由、序列化、认证等)
- 跨平台支持:作为 KMP(Kotlin Multiplatform)生态的一部分,支持 JVM/JS/Native
- 非阻塞 I/O:基于 Netty/Jetty 等引擎实现高并发处理
2. 快速搭建 Ktor 项目
2.1 使用 Ktor 项目生成器
通过 start.ktor.io 在线生成器选择配置:
- 引擎(Netty/Jetty)
- 插件(Routing, Content Negotiation 等)
- Gradle/Kotlin DSL 构建工具
2.2 手动配置(Gradle)
// build.gradle.kts
plugins {
kotlin("jvm") version "1.9.0"
application
id("io.ktor.plugin") version "2.3.3"
}
dependencies {
implementation("io.ktor:ktor-server-core-jvm")
implementation("io.ktor:ktor-server-netty-jvm")
implementation("ch.qos.logback:logback-classic:1.4.7")
}
3. 基础 HTTP 服务开发
3.1 入口文件示例
import io.ktor.server.application.*
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)
}
3.2 核心组件说明
| 组件 | 作用 |
|---|---|
Application | 服务主入口,管理生命周期和插件 |
Routing | 定义 HTTP 端点路由规则 |
Call | 封装请求/响应上下文 |
Features | 通过 install() 添加的扩展功能(如JSON序列化) |
4. 常用功能实现
4.1 路由分组
routing {
route("/api") {
get("/users") { /* 获取用户列表 */ }
post("/users") { /* 创建用户 */ }
}
}
4.2 JSON 序列化(需添加 ktor-serialization 插件)
install(ContentNegotiation) {
json(Json { prettyPrint = true })
}
data class User(val id: Int, val name: String)
get("/user/{id}") {
val id = call.parameters["id"]?.toIntOrNull()
call.respond(User(id ?: 0, "Ktor User"))
}
4.3 异常处理
install(StatusPages) {
exception<IllegalArgumentException> { call, cause ->
call.respond(HttpStatusCode.BadRequest, cause.message ?: "")
}
}
5. 部署与测试
5.1 打包可执行 JAR
./gradlew buildShadowDist
5.2 使用 cURL 测试
curl http://localhost:8080/api/users
6. 生产环境建议
- 添加
ktor-server-request-validation插件进行输入校验 - 使用
Micrometer集成监控指标 - 通过
Dockerfile容器化部署
提示:Ktor 官方文档提供完整的示例项目参考
