创建第一个应用

预计阅读时间: 2 分钟

在本教程中你会学到如何创建简单自托管的 Ktor 服务器应用,该应用程序以 Hello, World! 响应 HTTP 请求。 Ktor 应用可以使用通用构建系统(如 MavenGradle)构建。

目录:

包含正确的依赖

Ktor 分为几组构件, 允许只包含所需的功能。从而减少了包含所有代码的 fat-jar 的大小,也缩短了启动时间。

在本例中,只需包含构件 ktor-server-netty。 关于所有可用构件的列表,请查阅构件页。

这些依赖关系的正式版可在 jcenter 与 maven central 中找到。 对于预览版我们将其托管在 Bintray kotlin/ktor 上。

关于使用不同构建系统设置构建文件的更详细指南,请查阅:

创建自托管的应用

Ktor 允许应用在兼容 Servlet 的应用服务器(如 Tomcat)中运行, 也可以使用 Jetty、Netty 或者 CIO 作为内嵌应用。

在本教程中,我们会创建一个使用 Netty 的自托管应用。

可以通过调用 embeddedServer 函数开始,向其传入引擎工厂作为第一个参数、 端口号作为第二个参数,而将实际应用代码作为第四个参数传入(第三个参数是主机名,默认取 0.0.0.0)。

下述代码定义了单个路由,它对 URL / 上的 GET 动词的响应是文本 Hello, world!

定义该路由后,必须通过调用 server.start 方法来启动服务器, 同时传入一个布尔参数来指示是否希望应用的主线程阻塞。

Main.kt
import io.ktor.application.*
import io.ktor.http.*
import io.ktor.response.*
import io.ktor.routing.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*

fun main(args: Array<String>) {
    val server = embeddedServer(Netty, 8080) {
        routing {
            get("/") {
                call.respondText("Hello, world!", ContentType.Text.Html)
            }
        }
    }
    server.start(wait = true)
}

 

如果服务器设置为只是监听 HTTP 请求而之后不想做任何事, 通常会以 wait = true 调用 server.start。

运行该应用

考虑到应用的入口是标准的 Kotlin main 函数, 直接运行即可有效启动服务器并监听指定端口。

在浏览器中查验 localhost:8080 页,会看到 Hello, world! 文本。

下一步

这是编写并运行自托管 Ktor 应用的最简单示例。 继续学习 Ktor 服务端开发的旅程会是: