在本教程中你会学到如何创建简单自托管的 Ktor 服务器应用,该应用程序以 Hello, World!
响应 HTTP 请求。
Ktor 应用可以使用通用构建系统(如 Maven 或 Gradle)构建。
目录:
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
方法来启动服务器,
同时传入一个布尔参数来指示是否希望应用的主线程阻塞。
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 服务端开发的旅程会是: