§Pekko HTTP 伺服器後端
Play 使用 Pekko HTTP 伺服器後端透過網路上的 Pekko 串流來實作 HTTP 要求和回應。Pekko HTTP 實作 HTTP 的完整伺服器堆疊,包括完整的 HTTPS 支援,並支援 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 的任何工作設定在主執行緒之外,使用設定為 ThreadPools 中定義的客製化執行緒池的 Future
或 CompletionStage
,並使用 JavaAsync 和 ScalaAsync。詳情請見。
§設定 Pekko HTTP
Pekko HTTP 伺服器有許多可以設定的選項。這些選項在 設定 Pekko HTTP 的文件 中提供。
§HTTP/2 支援(孵化中)
Play 的 Pekko HTTP 伺服器也支援 HTTP/2。此功能標示為「孵化中」,因為 API 可能在未來變更,而且尚未在實際環境中徹底測試。不過,如果您想協助 Play 改進,請測試 HTTP/2 支援,並提供您的體驗回饋。
在啟用 HTTP/2 之前,您也應該在伺服器上 設定 HTTPS。一般來說,瀏覽器需要 TLS 才能與 HTTP/2 搭配使用,而 Play 的 Pekko HTTP 伺服器使用 ALPN(TLS 延伸)與支援它的客戶端協商協定。
若要新增對 HTTP/2 的支援,請新增 PlayPekkoHttp2Support
外掛程式。您可以在專案的 build.sbt
中使用 enablePlugins
呼叫來執行此動作,例如
lazy val root = (project in file("."))
.enablePlugins(PlayScala, PlayPekkoHttp2Support)
新增外掛程式會新增 play-pekko-http2-support
模組,提供 HTTP/2 的其他設定。預設情況下,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 伺服器後端的幾個範例。
建議的執行方式是將設定新增到兩個地方。首先,為 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 後端將用於所有情況。
在此文件發現錯誤?此頁面的原始碼可在 此處 找到。閱讀 文件指南 後,請隨時提交拉取請求。有問題或建議要分享?請前往 我們的社群論壇,與社群展開對話。