§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.sbt
和 application.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 页面。
下一步:部署您的应用程序
发现此文档中的错误?此页面的源代码可以在 这里 找到。在阅读 文档指南 后,请随时贡献拉取请求。有任何问题或建议要分享?请访问 我们的社区论坛,与社区开始对话。