文件

§Netty Server 後端

在 Play 2.6.x 之前,Play 使用 Netty Server 後端作為預設。在 2.6.x 中,預設後端已變更為 Pekko HTTP,但您仍可以在專案中手動選取 Netty 後端伺服器。

§使用

若要使用 Netty Server 後端,您首先需要停用 Pekko HTTP 伺服器,並將 Netty Server 外掛程式新增至您的專案

lazy val root = (project in file("."))
  .enablePlugins(PlayScala, PlayNettyServer)
  .disablePlugins(PlayPekkoHttpServer)

現在 Play 應該會自動選取 Netty Server 以在開發模式、生產環境和測試中執行。

§手動選取 Netty Server

如果出於某種原因,您的 classpath 中同時存在 Pekko HTTP 和 Netty Server JAR,則 Play 將無法預測性地選擇伺服器後端。您需要手動選取 Netty Server。這可透過明確覆寫 play.server.provider 設定選項並將其設定為 play.core.server.NettyServerProvider 的值來完成。

play.server.provider 設定值可以與其他設定選項以相同的方式設定。設定設定的各種方法說明在 設定檔文件 中。以下是啟用 Netty Server 的幾個範例。

建議的做法是將設定新增至兩個地方。首先,若要為 sbt run 工作啟用 Netty,請將下列內容新增至您的 build.sbt

PlayKeys.devSettings += "play.server.provider" -> "play.core.server.NettyServerProvider"

其次,若要在部署應用程式或使用 sbt start 工作時啟用 Netty 後端,請將下列內容新增至您的 application.conf 檔案

play.server.provider = play.core.server.NettyServerProvider

透過將設定新增至 build.sbtapplication.conf,您可以確保在所有情況下都會使用 Netty 後端。

§驗證 Netty 伺服器是否正在執行

當 Netty 伺服器正在執行時,所有要求的 RequestAttrKey.Server 要求屬性值為 netty。Pekko HTTP 後端不會設定此要求屬性的值。

Scala
import play.api.mvc.request.RequestAttrKey

class SomeScalaController @Inject() (cc: ControllerComponents) extends AbstractController(cc) {
  def index: Action[AnyContent] = Action { request =>
    assert(request.attrs.get(RequestAttrKey.Server) == Option("netty"))
    // ...
  }
}
Java
import play.api.mvc.request.RequestAttrKey;

public class SomeJavaController extends Controller {

  public Result index(Http.Request request) {
    assert (request
        .attrs()
        .getOptional(RequestAttrKey.Server().asJava())
        .equals(Optional.of("netty")));
    // ...
  }
}

§設定 Netty

請參閱 SettingsNetty 頁面。

下一步:部署您的應用程式


在此文件檔中發現錯誤?此頁面的原始程式碼可以在 這裡 找到。在閱讀 文件檔指引 後,請隨時提交拉取要求。有問題或建議要分享?請前往 我們的社群論壇 與社群展開對話。