Ktorは、Kotlinの非同期HTTPサーバーおよびクライアントアプリケーションを作成するためのネイティブフレームワークで、バージョン3に達しました。kotlinx-ioが採用され、互換性を破る変更を犠牲にして、パフォーマンスが向上し、Server-Sentイベント、CSFR、ZIPファイルからの静的リソースの提供などのサポートが追加された。
kotlinx-ioは低レベルのI/Oライブラリで、変更可能なバイト列であるBuffer
を抽象を中心に構築されている。Bufferはキューのように動作し、末尾にデータを書き込み、先頭から読み取る。Ktor 3では、kotlinx.io.Source
をエイリアスとしてInput
型を実装し、Output
を非推奨とし、ByteReadChannel
とByteWriteChannel
を再実装している。これらの低レベルクラスを直接使用している開発者は、新しいAPIに移行するためにアプリを修正する必要がある。
kotlinx-ioがもたらす主な利点は、パフォーマンスの向上だ。
ByteReadChannel、ByteWriteChannel、ネットワークインターフェース間の不要なバイトのコピーを削減しました。これにより、より効率的なバイト変換と構文解析が可能になり、将来的な性能向上の余地が生まれました。
JetBrainsは独自のベンチマークに基づき、新しいKtorはファイルやソケット操作に必要な時間が大幅に短縮され、場合によっては90%も削減されると述べている。
パフォーマンスに加えてKtor 3.0でもっとも大きな変更点は、サーバーからクライアントへの通信チャネルの作成を可能にするサーバープッシュ技術であるサーバー送信イベントのサポートである。サーバー送信イベントは、データがほとんど一方向に流れるシナリオ、特にファイアウォールのブロックを回避したり、接続の切断に対処したりする必要がある場合に、WebSocketよりも望ましい。一方、WebSocketはより効率的で、レイテンシが低くなる。
Ktor 3.0の他の便利な機能は、任意のルートに対して指定できるクロスサイトリクエストフォージェリ(CSRF)のサポートと、ZIPアーカイブから静的リソースを直接提供する機能である。ZIPアーカイブはベースパスから提供され、サブディレクトリを含むことができ、それらはURL構造に適切に反映される。
Ktor 3についての最後の注記として、KtorクライアントがビルドターゲットとしてWasmをサポートするようになったことが挙げられる。しかし、Kotlin/Wasmはまだアルファ版の段階であるため、Ktor 3でのWasmサポートはまだ実運用には適していない。
Ktorを使用して新しいプロジェクトを開始するには、Ktorのウェブサイトにアクセスし、要件にもっとも適したプラグインを選択する。利用可能なプラグインは、認証、ルーティング、モニタリング、シリアライゼーションなどが含まれる。既存のKtor 2プロジェクトを更新してKtor 3を使いたい場合は、JetBrainsが提供する移行ガイドを必ず読んでほしい。