§Pekko HTTPサーバーバックエンド
Playは、Pekko HTTPサーバーバックエンドを使用して、ネットワーク経由でPekko Streamsを使用してHTTPリクエストとレスポンスを実装します。 Pekko HTTPは、完全なHTTPSサポートを含むHTTPの完全なサーバースタックを実装し、HTTP/2をサポートしています。
Pekko HTTPサーバーバックエンドはPlayのデフォルトです。 必要に応じて、Nettyバックエンドを使用することもできます。
§Pekko HTTPの実装
Playのサーバーバックエンドは、低レベルサーバーAPIを使用して、PekkoのHttpRequest
クラスとHttpResponse
クラスを処理します。
Playのサーバーバックエンドは、PekkoのHttpRequest
をPlay HTTPリクエストに自動的に変換するため、実装の詳細は内部にあります。 Playは、サーバーバックエンドに関するすべてのルーティングとアプリケーションロジックを処理しながら、リクエストを処理するためのPekko-HTTPの能力と信頼性を引き続き提供します。
§ブロッキングAPIの操作
Playの他の部分と同様に、Pekko HTTPはノンブロッキングです。 つまり、常に少数のスレッドを使用して負荷を維持します.
これは、JDBCやHTTPURLConnectionなどのブロッキングAPIを使用する場合に問題になります。 これらのAPIは、リモートシステムからデータが返されるまでスレッドを待機させます。
CustomExecutionContext
で設定されたFuture
またはCompletionStage
を使用し、スレッドプールで定義されたカスタムスレッドプールを使用して、メインレンダースレッドからブロッキングAPIを使用した作業を設定してください。 詳細は、JavaAsyncおよびScalaAsyncを参照してください。
§Pekko HTTPの設定
Pekko HTTPサーバー用に設定できるさまざまなオプションがあります。 これらは、Pekko HTTPの設定に関するドキュメントに記載されています。
§HTTP/2サポート(インキュベーティング)
PlayのPekko HTTPサーバーは、HTTP/2もサポートしています。 この機能は「インキュベーティング」とラベル付けされています。APIが将来変更される可能性があり、実際に十分にテストされていないためです。 ただし、Playの改善にご協力いただける場合は、HTTP/2サポートをテストし、ご意見をお寄せください。
HTTP/2を有効にする前に、サーバーでHTTPSを設定する必要があります。 一般に、ブラウザはHTTP/2で動作するためにTLSを必要とし、PlayのPekko HTTPサーバーはALPN(TLS拡張)を使用して、それをサポートするクライアントとプロトコルをネゴシエートします。
HTTP/2のサポートを追加するには、PlayPekkoHttp2Support
プラグインを追加します。 たとえば、build.sbt
のプロジェクトのenablePlugins
呼び出しでこれを行うことができます。
lazy val root = (project in file("."))
.enablePlugins(PlayScala, PlayPekkoHttp2Support)
プラグインを追加すると、HTTP/2の追加設定を提供するplay-pekko-http2-support
モジュールが追加されます。 デフォルトでは、HTTP/2は有効になっていますが、http2.enabled
システムプロパティを渡すことで無効にすることができます(例:play "start -Dhttp2.enabled=no"
)。
play-scala-tls-exampleプロジェクトの./play
スクリプトに示されているように、必要なオプションを使用してアプリを実行する簡単なスクリプトを作成できます。
ヒント:nghttp2を使用して、アプリケーションに対してHTTP/2リクエストを実行します。
§Pekko HTTPサーバーの手動選択
何らかの理由でPekko HTTPとNettyサーバーの両方のJARがクラスパスにある場合、Playはサーバーバックエンドを予測どおりに選択できません。 Pekko HTTPサーバーを手動で選択する必要があります。 これを行うには、play.server.provider
設定オプションを明示的にオーバーライドし、値をplay.core.server.PekkoHttpServerProvider
に設定します。
play.server.provider
設定は、他の設定オプションと同じ方法で設定できます。 設定を設定するさまざまな方法は、設定ファイルのドキュメントに記載されています。 Pekko HTTPサーバーバックエンドを有効にするいくつかの例を以下に示します。
これを行うための推奨される方法は、2つの場所に設定を追加することです。 まず、sbt run
タスクでPekko HTTPを有効にするには、build.sbt
に次を追加します
PlayKeys.devSettings += "play.server.provider" -> "play.core.server.PekkoHttpServerProvider"
次に、アプリケーションをデプロイする場合、またはsbt start
タスクを使用する場合にPekko HTTPバックエンドを有効にするには、application.conf
ファイルに次を追加します
play.server.provider = play.core.server.PekkoHttpServerProvider
build.sbt
とapplication.conf
の両方に設定を追加することで、Pekko HTTPバックエンドがあらゆる場合に使用されるようにすることができます。
このドキュメントに誤りを見つけましたか? このページのソースコードはこちらにあります。 ドキュメントガイドラインをお読みいただいた後、プルリクエストをご提供ください。 質問やアドバイスがあれば、コミュニティフォーラムにアクセスして、コミュニティとの会話を始めてください。