サーバーエンジン
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-netty
ktor-server-jetty-jakarta
ktor-server-tomcat-jakarta
ktor-server-cio
以下は、Nettyの依存関係を追加する例です。
サーバーの作成方法を選択する
Ktorサーバーアプリケーションは、2つの方法で作成および実行できます。embeddedServerを使用してコード内でサーバーパラメータを迅速に渡す方法、またはEngineMainを使用して外部のapplication.conf
またはapplication.yaml
ファイルから設定を読み込む方法です。
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.EngineMain
io.ktor.server.jetty.jakarta.EngineMain
io.ktor.server.tomcat.jakarta.EngineMain
io.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>
エンジンの設定
このセクションでは、さまざまなエンジン固有のオプションを指定する方法を見ていきます。
コード内
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
グループ内で、すべてのエンジンに共通するオプションを指定できます。