Ktor 是一个异步框架,用于创建微服务、Web 应用等。从头到尾都是用 Kotlin 编写的。
Ktor 2.3.0 近日正式发布,这次更新为 Ktor 生态带来了许多新功能和改进。以下部分简要介绍了该版本的主要变化:
核心改进
WebSockets ContentNegotiation 插件的显试类型
WebSocket ContentNegotiation 插件现在支持指定显式类型:
client.webSocket("ws://localhost:8080/echo") {
val originalData: Any = Data("hello")
sendSerialized(originalData, typeInfo<Data>())
val received = receiveDeserialized<Data>(typeInfo<Data>())
assertEquals(originalData, received)
}
Socket的结构化并发支持
来自 ktor-network
的 Socket 实现现在是一个 CoroutineScope
。这意味着它支持 cancel()
操作来立即终止连接。
close()
继续作为正常关闭工作,并将等待所有待定操作完成。
抛弃 JS 遗留配置
即将发布的 Kotlin 1.9.0 版本将删除遗留的 JS 编译器。从 Ktor 2.3.0 开始,传统的编译器不再被支持。请考虑迁移到新的 IR 编译器。
服务器
路由中的正则表达式支持
Ktor 现在允许在定义路由时使用正则表达式。使用正则表达式路由,你可以匹配一个复杂的路由,并轻松地捕获路由参数。
routing {
get(Regex("^(?<name>.+)$")) {
val name = call.parameters["name"]
call.respondText("Hello, $name!")
}
}
Static Content API 清理
Static Content API 已经被完善和精简,以获得更友好的用户体验。这次我们把重点放在最常见的情况上,并为它们做了一个简单的 API:
routing {
staticFiles("/static", File("files"))
}
将为 /static
路径下的 files
目录中的所有文件提供服务。旧的 API 仍然可用,并将被支持。
而且我们也可以从资源中提供文件:
支持 CIO 的 100 Continue
CIO 引擎现在支持 100 Continue
状态。它开箱即用,不需要额外配置。
支持多个配置文件
通过允许使用多个文件,配置管理得到了简化。你可以使用 -config
CLI 选项传递多个配置文件。配置文件将被依次加载和合并。
支持 Jetty 11 和 Tomcat 10
对于已经包含 Jetty 或 Tomcat 依赖关系的项目,Ktor 2.3.0 增加了对 Jetty 11 和 Tomcat 10 服务器实现的支持。它们是作为单独的依赖项交付的:
dependencies {
implementation("io.ktor:ktor-server-jetty-jakarta:2.3.0")
implementation("io.ktor:ktor-server-tomcat-jakarta:2.3.0")
implementation("io.ktor:ktor-server-servlet-jakarta:2.3.0")
}
更多详情可查看:https://blog.jetbrains.com/ktor/2023/04/18/ktor-2-3-0-released/