在Tomcat中托管Netty服务器是否可行/可取?

2022-09-04 00:49:26

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

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

对我来说,这是非常有意义的,因为它完全解决了我的部署问题,并节省了我编写其他代码的时间。为什么这么大的“不不”?


答案 1

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

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

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


答案 2

这是非常有道理的。事实上,我们在Tomcat中运行一个Java电子邮件服务器。

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

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

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


推荐