文档

§Netty 服务器后端

在 Play 2.6.x 之前,Play 使用 Netty 服务器后端作为默认后端。在 2.6.x 中,默认后端已更改为 Pekko HTTP,但您仍然可以在项目中手动选择 Netty 后端服务器。

§用法

要使用 Netty 服务器后端,您首先需要禁用 Pekko HTTP 服务器并将 Netty 服务器插件添加到您的项目中

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

现在 Play 应该自动选择 Netty 服务器在开发模式、生产模式和测试中运行。

§手动选择 Netty 服务器

如果由于某种原因,您的类路径上同时存在 Pekko HTTP 和 Netty 服务器 JAR 文件,那么 Play 将无法预测地选择服务器后端。您需要手动选择 Netty 服务器。这可以通过显式覆盖 play.server.provider 配置选项并将其设置为 play.core.server.NettyServerProvider 的值来完成。

play.server.provider 配置设置可以与其他配置选项相同的方式设置。在 配置文件文档 中描述了设置配置的不同方法。下面显示了启用 Netty 服务器的几个示例。

推荐的方法是在两个地方添加设置。首先,要为 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 页面。

下一步:部署您的应用程序


发现此文档中的错误?此页面的源代码可以在 这里 找到。在阅读 文档指南 后,请随时贡献拉取请求。有任何问题或建议要分享?请访问 我们的社区论坛,与社区开始对话。