Play 框架不支持 servlet 规范,但是在它的部署选项中,可以将整个应用程序打包到一个 war 文件中并将其部署到任何 servlet 容器。
从 1.1 版本开始,play 使用netty作为集成的 Web 服务器。
我想知道当一个游戏应用程序部署在一个战争文件中时会发生什么。
它是否仍然在 servlet 容器内使用 netty 并将其包装起来?它有任何明显的性能成本吗?或者它只是访问 servlet 容器?
正如 Niels 所说,Play 不使用 Netty 部署到其他平台。
如果您使用play run
orplay start
命令运行 Play,它会使用 Netty 来管理请求,然后将它们传递给 Play 框架。
但是,如果您想部署到另一个应用程序服务器,这是不可能的。因此,Play 将 HTTP 处理包装在 ServletWrapper 周围,这有效地转换了 Play 的正常工作方式,并使其在符合 Servlet 规范的 J2EE 堆栈上可用。
可以在此处找到此包装器的特定代码。当您构建您的 WAR 文件时,有效地将这个 ServletWrapper 放置为暴露的 Servlet(很像 Struts 对 ActionServlet 所做的),它处理必要的工作以将请求路由到正确的位置。
据我所知,它不使用netty。它有一个特殊的 servlet,将工作委托给 play-classes。只有 glassfish 有一个原生游戏容器。它对性能有明显的负面影响。
正如这个页面所暗示的,
在 Play 1.2 中,您可以.war
使用命令获取文件play war myapp -o myapp.war
并部署在该页面中列出的 Java EE 服务器之一中。