ドキュメント

§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.sbtapplication.confの両方に設定を追加することで、Pekko HTTPバックエンドがあらゆる場合に使用されるようにすることができます。

次:NettyサーバーでPlayを使う


このドキュメントに誤りを見つけましたか? このページのソースコードはこちらにあります。 ドキュメントガイドラインをお読みいただいた後、プルリクエストをご提供ください。 質問やアドバイスがあれば、コミュニティフォーラムにアクセスして、コミュニティとの会話を始めてください。