一. Ktor 介绍
Ktor 是一个高性能的、基于 Kotlin 的 Web 开发框架,支持 Kotlin Coroutines、DSL 等特性。
Ktor 是一个由 Kotlin 团队打造的 Web 框架,可用于创建异步、高性能和轻量级的 Web 服务器,并使用 Kotlin 惯用的 API 构建非阻塞的多平台 Web 客户端。
Ktor 的服务端仅限于 JVM,但是 Ktor 的客户端是一个 Multiplatform 的库。
如果使用 Kotlin Multiplatform 构建跨平台项目时,使用 Ktor 的客户端作为 Http 框架是一个不错的选择。
Ktor 由两部分组成:服务器引擎和灵活的异步 HTTP 客户端。当前版本主要集中在 HTTP 客户端上。客户端是一个支持 JVM,JS,Android 和 iOS 的多平台库,现在经常在跨平台移动应用程序中使用。
二. Ktor 服务端的使用
我们可以通过多种方式运行 Ktor 服务端程序:
![](https://i-blog.csdnimg.cn/blog_migrate/c9c0ce95eeff014f5ca67c5223a5a91a.png)
在 main() 中调用 embeddedServer 来启动 Ktor 应用
运行一个 EngineMain 的 main() 并使用 HOCON application.conf 配置文件
作为 Web 服务器中的 Servlet
在测试中使用 withTestApplication 来启动 Ktor 应用
2.1 Gradle 配置 Ktor
Kotlin 的版本需要 1.3.x,因为 Ktor 底层会依赖到 Kotlin Coroutines。
在需要使用 Ktor 的 module 中添加如下的依赖:
dependencies {
...
implementation "io.ktor:ktor-server-core:${libs.ktor}"
implementation "io.ktor:ktor-server-netty:${libs.ktor}"
}
后面的例子还会介绍 Ktor 其他的 artifact,例如:freemarker、gson 等。
2.2 embeddedServer
当使用 embeddedServer 时,Ktor 使用 DSL 来配置应用程序和服务器引擎。目前,Ktor 支持 Netty、Jetty、Tomcat、CIO(Coroutine I/O) 作为服务器引擎。(当然,也支持创建自己的引擎并为其提供自定义配置。)
以 Netty 作为服务器引擎为例,通过 embeddedServer 启动 Ktor 应用:
fun main() {
embeddedServer(Netty, port?:8080, watchPaths = listOf("MainKt"), module = Application::module).start()
}
2.3 ApplicationCall && Routing
当一个请求进入 Ktor 应用时(可以是 HTTP,HTTP / 2 或 WebSocket 请求)&#