サーバーエンジン
Ktorサーバーアプリケーションを実行するには、まずサーバーを作成し、設定する必要があります。 サーバーの設定にはさまざまなものが含まれます。
- ネットワークリクエストを処理するためのエンジン
- サーバーにアクセスするために使用されるホストとポートの値
- SSL設定
サポートされているプラットフォーム
以下の表は、各エンジンがサポートするプラットフォームをリストしています。
| Engine | Platforms | HTTP/2 |
|---|---|---|
Netty | JVM | ✅ |
Jetty | JVM | ✅ |
Tomcat | JVM | ✅ |
CIO (Coroutine-based I/O) | JVM, Native, GraalVM, JavaScript, WasmJs | ✖️ |
ServletApplicationEngine | JVM | ✅ |
依存関係の追加
使用したいエンジンを使用する前に、対応する依存関係を ビルドスクリプトに追加する必要があります。
ktor-server-nettyktor-server-jetty-jakartaktor-server-tomcat-jakartaktor-server-cio
以下は、Nettyの依存関係を追加する例です。
サーバーの作成方法を選択する
Ktorサーバーアプリケーションは、2つの方法で作成および実行できます。
embeddedServerを使用してコード内でサーバーパラメータを迅速に渡す方法EngineMainを使用して外部の
embeddedServer
embeddedServer() 関数は、特定の型のエンジンを作成するために使用されるエンジンファクトリを受け入れます。以下の例では、Nettyエンジンでサーバーを実行し、ポート8080をリッスンするために、 Nettyファクトリを渡しています。
import io.ktor.server.response.*
import io.ktor.server.routing.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
fun main(args: Array<String>) {
embeddedServer(Netty, port = 8080) {
routing {
get("/") {
call.respondText("Hello, world!")
}
}
}.start(wait = true)
}EngineMain
EngineMainは、サーバーを実行するためのエンジンを表します。以下のエンジンを使用できます。
io.ktor.server.netty.EngineMainio.ktor.server.jetty.jakarta.EngineMainio.ktor.server.tomcat.jakarta.EngineMainio.ktor.server.cio.EngineMain
サーバーの作成と起動
EngineMain.main()関数は、選択されたエンジンでサーバーを起動し、外部設定ファイルで指定されたアプリケーションモジュールを読み込みます。以下の例では、アプリケーションのmain関数からサーバーを起動しています。
package com.example
import io.ktor.server.application.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)
fun Application.module() {
routing {
get("/") {
call.respondText("Hello, world!")
}
}
}ktor {
deployment {
port = 8080
}
application {
modules = [ com.example.ApplicationKt.module ]
}
}ktor:
deployment:
port: 8080
application:
modules:
- com.example.ApplicationKt.moduleビルドシステムタスクを使用してサーバーを起動する必要がある場合は、必要なEngineMainをメインクラスとして設定する必要があります。
application {
mainClass.set("io.ktor.server.netty.EngineMain")
}mainClassName = "io.ktor.server.netty.EngineMain"<properties>
<main.class>io.ktor.server.netty.EngineMain</main.class>
</properties>サーバーインスタンスを起動せずに作成する
EngineMain.main()を直接呼び出してサーバーを即座に起動するだけでなく、EngineMain.createServer()を呼び出すことで、サーバーを起動せずにEmbeddedServerインスタンスを返すことができます。
このアプローチにより、.start()や.stop()をいつ呼び出すか、またはサーバーがリクエストの受け入れを開始する前に任意の操作を実行するかを制御できます。
// Example using Netty
val server = io.ktor.server.netty.EngineMain.createServer(args)
// perform additional initialization, logging, instrumentation, etc.
server.start(wait = true)エンジンの設定
このセクションでは、さまざまなエンジン固有のオプションを指定する方法を見ていきます。
コード内
embeddedServer関数は、configureパラメータを使用してエンジン固有のオプションを渡すことができます。このパラメータには、すべてのエンジンに共通し、 ApplicationEngine.Configuration クラスによって公開されているオプションが含まれています。
以下の例は、Nettyエンジンを使用してサーバーを設定する方法を示しています。configureブロック内で、ホストとポートを指定するためにconnectorを定義し、さまざまなサーバーパラメータをカスタマイズしています。
connectors.add()メソッドは、指定されたホスト(127.0.0.1) とポート(8080)を持つコネクタを定義します。
これらのオプションに加えて、他のエンジン固有のプロパティを設定できます。
Jetty
Jetty固有のオプションは、 JettyApplicationEngineBase.Configuration クラスによって公開されています。
configureServer ブロック内でJettyサーバーを設定できます。これは、 Server インスタンスへのアクセスを提供します。
idleTimeoutプロパティを使用して、接続が閉じられるまでにアイドル状態を維持できる期間を指定します。
Tomcat
エンジンとしてTomcatを使用する場合、 configureTomcat プロパティを使用して設定できます。これは、 Tomcat インスタンスへのアクセスを提供します。
設定ファイル内
EngineMainを使用する場合、ktor.deploymentグループ内で、すべてのエンジンに共通するオプションを指定できます。
