Applicationとは?

Estimated reading time: 1 minute

Ktorサーバーアプリケーションは、サーバーエンジンを設定することで1つ以上のポートをリッスンするカスタムプログラムです。 アプリケーションロジックを含むモジュール群で構成されており、 HTTP/S 1.x/2.x、WebSocketリクエストを処理するために ルーティングセッション圧縮などの Featureをインストールすることができます。

Ktorは、生のソケットを処理する機能も提供しますが、アプリケーションおよびそのパイプラインの一部としては提供しません。

目次:

Application

Applicationインスタンスは、Ktorアプリケーションのメインユニットです。 リクエストを受信すると(リクエストはHTTP、HTTP/2、またはWebSocketの場合があります)、ApplicationCallに変換され、Applicationが所有するパイプラインを通過します。 パイプラインは、以前にインストールされた1つ以上のインターセプターで構成され、リクエストの処理を終了するルーティング、圧縮などの特定の機能を提供します。

通常、Ktorプログラムは、Featureをインストール・設定したmoduleを介してアプリケーションパイプラインを構成します。

ライフサイクルセクションで、パイプラインに関する詳細情報を読むことができます。

ApplicationCall

ApplicationCallに関するページをご覧ください。

Feature

Featureは、パイプラインにインストール・設定することができるシングルトン(通常はコンパニオンオブジェクト)です。 Ktorにはいくつかの標準Featureが含まれていますが、独自のFeatureを追加したりコミュニティから他のFeatureを追加したりできます。 アプリケーション自体に対してや特定のルートに対してなど、任意のパイプラインに機能をインストールできます。

Featureの詳細については、専用ページをご覧ください。

module

Ktorモジュールはユーザが定義した関数であり、Applicationクラスを受け取ります。 Applicationクラスはサーバーパイプラインの設定・Featureのインストール・ルートの登録・リクエストの処理等の責務を持ちます。

サーバーの起動時にロードするモジュールをapplication.confファイルで指定する必要があります。

単純なモジュール関数は次のようになります。

Main.kt
package com.example.myapp

fun Application.mymodule() {
    routing {
        get("/") {
            call.respondText("Hello World!")
        }
    }
}

もちろん、モジュール関数をいくつかの小さな関数またはクラスに分割できます。

モジュールは、完全修飾名(クラスの完全修飾名とドット(.)で区切られたメソッド名)によって参照されます。

したがって、この例では、モジュールの完全修飾名は次のようになります。

com.example.myapp.MainKt.mymodule

mymoduleはApplicationクラスの拡張メソッドです(Applicationレシーバーです)。 Kotlinはトップレベル関数として定義されているため、Ktサフィックス(FileNameKt)を持つJVMクラスを作成し、最初のパラメーターとしてレシーバーを持つ静的メソッドとして拡張メソッドを追加します。 この場合、クラス名はcom.example.myappパッケージのMainKtであり、Javaメソッドシグネチャはstatic public void mymodule(Application app)になります。

関連項目