在Tomcat中托管Netty Server是否可行/可取?

我们构建基于Netty / NIO的服务,我正在考虑将此服务部署到我们的生产环境中。 我们标准的部署服务的方式是作为WAR,部署在Tomcats中。

当我在这里建议采用相同的方法时,我得到了“不应该做”的呐喊和抱怨,因为Netty和Tomcat都是服务器,“将一台服务器托管在另一台服务器上是没有意义的”。

对我而言,它非常有意义,因为它完全解决了我的部署问题,并使我免于编写其他代码。 为什么这么大“不不”?

Tomcat提供的动态WAR部署和取消部署是为Web应用程序设计的。 您尝试部署到Tomcat的Netty应用程序不是Web应用程序,而是仅共享VM内存的单独服务器。 这意味着Tomcat已被重新用于OSGi等通用微内核。

但是,我不认为这是一个大问题。 由于您的公司使用WAR作为标准部署机制,因此重用它可能是个好主意。 您甚至不需要编写一些管理function,如远程关机,因为Tomcat已经提供了它们。 您需要做的就是确保在取消部署时释放所有资源。

有些人可能不喜欢这种方法。 理想情况下,应该有一个用于部署和管理任何应用程序(也称为微内核)的通用基础架构,甚至将Tomcat部署为模块,微内核直接管理WAR而不是Tomcat。 但这还有很长的路要走。

它非常有意义。 事实上,我们在Tomcat中运行Java电子邮件服务器。

Tomcat在容纳应用程序方面有一些巨大的优势:

  1. 守护程序脚本已经为您编写
  2. Tomcat允许热部署(只要你没有使用hibernate :))
  3. 在某些时候,您可能需要Admin UI或Admin API
  4. 有很多工具可以监控Tomcat,这意味着可以免费监控您的应用。

现在使用Netty,Mina或任何事件驱动的网络技术,您将无法使用大多数MVC框架。 实际上,您将无法使用大多数Java企业框架,因为许多事情依赖于每个请求的一个线程(事务,安全性等)。

不要在Tomcat中启动任何东西,它非常不方便,而且这有很多痛苦的问题。 只需在应用程序中嵌入Tomcat(或Jetty),然后以普通的java进程运行应用程序。