Skip to content

サーバーエンジン

Ktorサーバーアプリケーションを実行するには、まずサーバーを作成し、設定する必要があります。 サーバーの設定にはさまざまなものが含まれます。

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

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

以下の表は、各エンジンがサポートするプラットフォームをリストしています。

EnginePlatformsHTTP/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エンジンでサーバーを実行し、ポート8080をリッスンするために、Nettyファクトリを渡しています。

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>

エンジンの設定

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

コード内

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