4

Play 框架不支持 servlet 规范,但是在它的部署选项中,可以将整个应用程序打包到一个 war 文件中并将其部署到任何 servlet 容器。

从 1.1 版本开始,play 使用netty作为集成的 Web 服务器。

我想知道当一个游戏应用程序部署在一个战争文件中时会发生什么。

它是否仍然在 servlet 容器内使用 netty 并将其包装起来?它有任何明显的性能成本吗?或者它只是访问 servlet 容器?

4

3 回答 3

6

正如 Niels 所说,Play 不使用 Netty 部署到其他平台。

如果您使用play runorplay start命令运行 Play,它会使用 Netty 来管理请求,然后将它们传递给 Play 框架。

但是,如果您想部署到另一个应用程序服务器,这是不可能的。因此,Play 将 HTTP 处理包装在 ServletWrapper 周围,这有效地转换了 Play 的正常工作方式,并使其在符合 Servlet 规范的 J2EE 堆栈上可用。

可以在此处找到此包装器的特定代码。当您构建您的 WAR 文件时,有效地将这个 ServletWrapper 放置为暴露的 Servlet(很像 Struts 对 ActionServlet 所做的),它处理必要的工作以将请求路由到正确的位置。

于 2011-08-07T20:20:14.467 回答
0

据我所知,它不使用netty。它有一个特殊的 servlet,将工作委托给 play-classes。只有 glassfish 有一个原生游戏容器。它对性能有明显的负面影响。

于 2011-08-07T09:34:48.200 回答
0

正如这个页面所暗示的,

在 Play 1.2 中,您可以.war使用命令获取文件play war myapp -o myapp.war并部署在该页面中列出的 Java EE 服务器之一中。

于 2016-06-07T09:32:04.637 回答