Kotlin 异步框架,Ktor 2.0.1 发布

科技资讯 投稿 78500 0 评论

Ktor 是使用 Kotlin 构建异步服务器和客户端的 Web 框架,上个月发布了重要的新版本 2.0,并于近日发布了首个补丁更新 2.0.1。

Ktor 2.0 引入了许多新功能,以及破坏性变化,官方称这让他们有机会执行一些维护工作并摆脱遗留决策。尽管存在重大变更,但官方表示已尽可能降低其影响,并提供了有助于自动迁移的实用工具。

Kotlin 异步框架,Ktor 2.0.1 发布

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。

编程笔记 » Kotlin 异步框架,Ktor 2.0.1 发布

赞同 (125) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽