Skip to content

サーバーエンジン

Ktorサーバーアプリケーションを実行するには、まずサーバーを作成し、設定する必要があります。 サーバー設定には、以下のような様々な設定が含まれます:

  • ネットワークリクエストを処理するためのエンジン
  • サーバーへのアクセスに使用されるホストとポートの値。
  • SSL設定。

サポートされているプラットフォーム

以下の表は、各エンジンでサポートされているプラットフォームを示しています:

エンジンプラットフォームHTTP/2
NettyJVM
JettyJVM
TomcatJVM
CIO (Coroutine-based I/O)JVM, Native, GraalVM, JavaScript, WasmJs✖️
ServletApplicationEngineJVM

依存関係の追加

目的のエンジンを使用する前に、対応する依存関係をビルドスクリプトに追加する必要があります:

  • ktor-server-netty
  • ktor-server-jetty-jakarta
  • ktor-server-tomcat-jakarta
  • ktor-server-cio

以下は、Nettyの依存関係を追加する例です:

Kotlin
Groovy
XML

サーバーの作成方法を選択する

Ktorサーバーアプリケーションは、2つの方法で作成および実行できます:

  • embeddedServer を使用して、コード内でサーバーパラメータを素早く渡す
  • EngineMain を使用して、外部の application.conf または application.yaml ファイルから設定を読み込む

embeddedServer

embeddedServer() 関数は、特定のタイプのエンジンを作成するために使用されるエンジンファクトリを受け取ります。以下の例では、Netty ファクトリを渡して、Nettyエンジンでサーバーを実行し、8080 ポートでリッスンします:

kotlin
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 関数がサーバーを起動します:

kotlin
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!")
        }
    }
}
shell
ktor {
    deployment {
        port = 8080
    }
    application {
        modules = [ com.example.ApplicationKt.module ]
    }
}
yaml
ktor:
    deployment:
        port: 8080
    application:
        modules:
            - com.example.ApplicationKt.module

ビルドシステムのタスクを使用してサーバーを起動する必要がある場合は、必要な EngineMain をメインクラスとして設定する必要があります:

kotlin
application {
    mainClass.set("io.ktor.server.netty.EngineMain")
}
groovy
mainClassName = "io.ktor.server.netty.EngineMain"
xml
<properties>
    <main.class>io.ktor.server.netty.EngineMain</main.class>
</properties>

起動せずにサーバーインスタンスを作成する

サーバーをすぐに起動するために EngineMain.main() を直接呼び出す以外に、サーバーを起動せずに EmbeddedServer インスタンスを返す EngineMain.createServer() を呼び出すこともできます。

このアプローチでは、サーバーがリクエストの受け付けを開始する前に、いつ .start().stop() を呼び出すか、あるいはサーバーに対して何らかの操作を行うかを制御できます。

Kotlin
// Nettyを使用した例
val server = io.ktor.server.netty.EngineMain.createServer(args)
// 追加の初期化、ロギング、インストルメンテーションなどを実行します
server.start(wait = true)

エンジンの設定

このセクションでは、様々なエンジン固有のオプションを指定する方法を見ていきます。

コード内での設定

embeddedServer 関数では、configure パラメータを使用してエンジン固有のオプションを渡すことができます。このパラメータには、すべてのエンジンに共通で ApplicationEngine.Configuration クラスによって公開されているオプションが含まれます。

以下の例は、Netty エンジンを使用してサーバーを設定する方法を示しています。 configure ブロック内で、ホストとポートを指定するための connector を定義し、様々なサーバーパラメータをカスタマイズします:

kotlin

connectors.add() メソッドは、指定されたホスト (127.0.0.1) とポート (8080) でコネクタを定義します。

これらのオプションに加えて、他のエンジン固有のプロパティを設定することもできます。

Netty

Netty固有のオプションは、 NettyApplicationEngine.Configuration クラスによって公開されています。

kotlin

Jetty

Jetty固有のオプションは、 JettyApplicationEngineBase.Configuration クラスによって公開されています。

configureServer ブロック内でJettyサーバーを設定できます。これにより Server インスタンスにアクセスできます。

接続が閉じられるまでにアイドル状態でいられる時間を指定するには、idleTimeout プロパティを使用します。

kotlin

CIO

CIO固有のオプションは、 CIOApplicationEngine.Configuration クラスによって公開されています。

kotlin

Tomcat

Tomcatをエンジンとして使用する場合、 configureTomcat プロパティを使用して設定できます。これにより Tomcat インスタンスにアクセスできます。

kotlin

設定ファイル内での設定

EngineMain を使用する場合、ktor.deployment グループ内ですべてのエンジンに共通のオプションを指定できます。

shell
yaml

Netty

設定ファイル内の ktor.deployment グループで、Netty固有のオプションを設定することもできます:

shell
yaml