Ktor 2.0.1 发布,Kotlin 异步框架


Ktor 是使用 Kotlin 构建异步服务器和客户端的 Web 框架,上个月发布了重要的新版本 2.0,并于近日发布了首个补丁更新 2.0.1。 Ktor 2.0 引入了许多新功能,以及破坏性变化,官方称这让他们有机会执行一些维护工作并摆脱遗留决策。尽管存在重大变更,但官方表示已尽可能降低其影响,并提供了有助于自动迁移的实用工具。 Ktor 2.0 新特性

Ktor 服务器

简化的可扩展性

Ktor 提供的所有功能均以插件架构构建,“功能”也因此更名为“插件”。对于某些人来说,架构模型会难以理解。2.0 大幅简化了可扩展性 API,使插件更易创建。

看看下面 1.x 的 API 代码

companion object Feature : ApplicationFeature<ApplicationCallPipeline, CustomHeader.Configuration, CustomHeader> {
override val key = AttributeKey<CustomHeader>("CustomPlugin")
override fun install(pipeline: ApplicationCallPipeline, configure: Configuration.() -> Unit): CustomHeader {
 val configuration = Configuration().apply(configure)

 val feature = CustomHeader(configuration)

 pipeline.intercept(ApplicationCallPipeline.Call) {

feature.intercept(this)
}

 return feature
}
}

到了 2.0 中

val myCustomPlugin = createApplicationPlugin("CustomPlugin") {
onCall {

}

onCallReceive {

}

onCallRespond {

}
}

大多数现有插件都已转换为使用新 API,并已覆盖大多数情景。 有关详情,请参见 `CustomHeader` 插件从旧 API 到新 API 的转换,以及插件开发文档。

据官方介绍,他们在可扩展性方面还有更多计划,包括用于从市场轻松发布和使用插件的工具!

Native 支持

在服务器端,除了 GraalVM(从 1.6 开始就已支持)之外,现在还支持 Kotlin/Native,这意味着独立服务器应用程序上有了两种选择。

关于 Kotin/Native 支持,目前仅限于使用 CIO 作为引擎,开发团队将继续在性能领域推进工作。建议使用新的 Kotlin/Native 内存模型。

其他服务器改进

对 Ktor 服务器进行了一系列较小的改进,包括随机端口支持

fun main() {
embeddedServer(Netty, port = 0) {
configureRouting()
}.start(wait = true)
}
以及改进的测试 API、类型安全路由、XML 序列化、插件的子路由以及 60 多个错误修正和其他功能。

Ktor 客户端

简化的 API

API 得到进一步简化。在 Ktor 客户端中,引入了新的 API 来处理常见 HTTP 请求

val result = client.post("http://127.0.0.1:$port/") {

}
result.bodyAsText()

新版本已经摆脱了通用的 post<T>, get<T> 方法。 现在,所有内容都返回一个 `HttpResponse`,可供访问正文(使用 `bodyAsText`、`bodyAsChannel`)以及标题。

重试

增加了对重试的内置支持,包括重试之间的时间调整

val client = HttpClient(CIO) {
install(HttpRequestRetry) {
maxRetries = 5
retryIf { request, response ->
!response.status.isSuccess()
}
retryOnExceptionIf { _, cause ->
cause is NetworkError
}
delayMillis { retry ->
retry * 3000L
} // retries in 3, 6, 9, etc. seconds
}
}

内容协商

如果您一直在服务器中使用内容协商,您应该已经很熟悉这一功能了。 本质上,它就是客户端与服务器协商可以请求和提供的不同类型内容的能力。 在此之前,它的协商方面仅适用于服务器。 现在,客户端也提供了此功能。

val client = HttpClient(CIO) {
install(ContentNegotiation) {
}
}
这个插件有效取代了 `JsonFeature`。

其他客户端改进

除了上述内容外,客户端还包括用于身份验证的快捷 API(例如 `basic()` 和 `bearer()` 辅助函数)、请求级别的侦听器、新的指标插件、XML 序列化,以及许多错误修正和其他功能。

更多内容查看 Changelog。

相關推薦

2022-08-15

用等。从头到尾都是用 Kotlin 编写的。 Ktor 2.1.0 近日正式发布,除了新的功能和错误修复之外,还特别发布了三个新工具的测试版。让我们逐一看看这些工具。 本地命令行工具 Ktor 提供了两种方法来简化创建新的应用程序模板

2022-12-19

日确定了 2023 年 Ktor 的路线图,并将专注于 3.0.0 版本的发布。虽然一个主要版本通常通常会带来重大的变化,但 Ktor 3.0.0 大多数变化是关于 API 和包,特别是: 将发布一直在研究的新的简化路由 API。 要切换到 Tomcat 11、Jetty

2023-04-24

用等。从头到尾都是用 Kotlin 编写的。 Ktor 2.3.0 近日正式发布,这次更新为 Ktor 生态带来了许多新功能和改进。以下部分简要介绍了该版本的主要变化: 核心改进 WebSockets ContentNegotiation 插件的显试类型 WebSocket ContentNegotiation

2023-10-14

语言开发而备受开发者青睐。 Eclipse Vert.x 版本 4.4.6 现已发布,此版本修复了自 Vert.x 4.4.5 发布以来已经报告的一些错误。此外还披露了 CVE-2023-44487,这是一个会影响 HTTP/2 服务器的 bug。Vert.x 升级到 Netty 4.1.100.Final,

2023-03-31

语言开发而备受开发者青睐。 Eclipse Vert.x 版本 4.4.1 已经发布。自 Vert.x 4.4.0 发布以来已经报告了不少错误,项目团队对此表达了感谢。具体更新内容包括: vertx-web 升级到 GraphQL-Java 20.1 HttpServerRequest.formAttributes() 有多余的

2022-07-02

Wiki:https://gitee.com/pp/SmsForwarder/wikis/Home PS. 自 2022-06-09 发布 3.0 以来,经过几个小版本的迭代,目前已经趋于稳定,3.x 版本的7天活跃用户占比已攀升到 31.81%,想要升级的用户可以试试了 Q:升级到 3.x 发现很耗电,

2023-11-20

继几周前宣布推出第一个稳定版本后,JetBrains 发布了 2024 年 Kotlin Multiplatform 的开发路线图。 其目标是在 2024 年对 Kotlin Multiplatform 核心技术、Compose Multiplatform、KMP 工具和 KMP 库进行一系列改进。 “我们致力于使Compose Multipla

2023-04-15

JetBrains 在 KotlinConf’23 大会上宣布,Compose Multiplatform 已支持 iOS,目前处于 alpha 阶段。至此,Compose Multiplatform 基本实现了全平台支持:iOS、Android、Windows、macOS、Linux 和 Web。 Compose Multiplatform 是用于跨多个平台共享 UI 的

2022-12-07

。组件管理能力能够帮助我们实现组件的版本控制、maven发布、aar/jar与源码之间的切换等能力,Rubik还可以通过配置文件,更简便的把现有的组件,组合成不同的APK。 Rubik框架的工程结构       换而

2023-04-16

根据 KotlinConf 2023 的消息,Kotlin 基金会正在启动一项针对 Kotlin 开源库作者的资助计划和一项针对公司的会员招募计划。 针对 Kotlin 开源库作者的资助计划 Kotlin 基金会的目标是增强 Kotlin 生态系统并促进其可持续发展,因此

2022-11-14

知名软件行业分析公司 RedMonk 发布了 2022 年 6 月(第三季度)编程语言排行榜。 RedMonk 编程语言排行榜通过追踪编程语言在 GitHub 和 Stack Overflow 上的代码使用情况与讨论数量,统计分析后进行排序,其旨在深入了解潜在的语言

2022-06-01

Seata 1.5.1 正式发布。 发布概览 主要新增特性:支持用户控制台,支持Skywalking tracing集成,支持bRPC、EDAS Hsf, 支持 kotlin 协程,支持 TCC幂等/空回滚/防悬挂,支持分布式任务调度,支持 Redis 存储lua模式,支持ON DUPLICATE KEY UPDATE 等

2023-02-21

Snack3,一个高性能的 JsonPath 框架 借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计。其下一切数据都以ONode表示,ONode也即 One node 之意,代表任何类型,也可以转换为任何类型。 强调文档树的操控和构建能

2023-11-24

次 commit、一千多个 issue、讨论和 PR 之后,Rocket v0.5 正式发布了。 Rocket 是支持异步的后端Rust Web框架,专注于可用性、安全性、可扩展性和性能。它使编写安全的Web应用程序变得简单,而不会牺牲生产力或性能。 Rocket v0.5