我想知道在使用http4s服务器应用程序接口时是否有配置tomcat的选项。Tomcat构建器允许更改一些基本选项,但除了这些选项之外,没有什么可以设置的。我可以提供一个server.xml文件吗?或者获取tomcat实例的访问权限?
发布于 2021-10-08 12:35:51
Tomcat,AFAIR是一个运行定义为WAR的应用程序的服务器。也就是说:你的应用程序是而不是a server,你的应用程序被逻辑绑定到这个外部层提供的功能。
Http4s服务器直接与外部世界通信,它通过FS2 streams管理请求生命周期,如果你使用它,那么你可能会通过Doobie或其他一些Cats库与DB通信,这些库也管理自己的线程池和事务,而不是依赖于ThreadLocal和其他类似JavaEE和JPA类的约定。
长话短说:这些模型是不兼容的。
您将不得不剥离90%的Http4s,以保留一些可能与实现无关的东西,然后将其连接到Tomcat,但这将只剩下,IDK,DSL用于构建请求?为此,您将有更好的机会,例如,使用Endpoints4s或Tapir定义事物,并实现将事物绑定到Tomcat的解释器。
但在这一点上,使用Tomcat或任何其他servlet容器可能没有好处:在Java中,监视通常很容易,因为每个1个正在进行的请求都有一个线程,并且所有DB连接和内容都作为请求范围的内容放入ThreadLocal中。同时,几乎所有的IO monad都使用线程池(不同的边界是分开的),因此您的操作可以跨越多个线程。容器用来监视事物的所有约定(在性能方面相当不灵活)都该下地狱了。
同时,Http4s有自己的跟踪方法(通过中间件),类似地,您可以向DB查询添加工具。因此,servlet容器提供的东西也可以在那里使用,尽管配置它们需要一些工作。
底线是:如果你使用Http4s,你不需要servlet容器,如果你使用servlet容器,那么你不能很好地集成使用任何IO monad (scala.concurrent.Future,cats.effect.IO,monix.execution.Task,zio.ZIO,等等)的任何东西,因为它们不能保证在同一线程中运行整个操作(使某些Java框架所做的许多假设无效)。
https://stackoverflow.com/questions/69488445
复制相似问题