当前位置: 首页 > 知识库问答 >
问题:

Tomcat—每个请求一个线程—还是其他替代方案?

卫博雅
2023-03-14

我的理解是,在Tomcat中,每个请求将占用一个Java/(因此也是OS)线程。

想象一下,我有一个应用程序,有很多长时间运行的请求(例如一个有多个玩家的扑克游戏),涉及游戏内聊天和AJAX长轮询等。

有没有办法更改我的webapp的tomcat配置/体系结构,这样我就不会对每个请求使用线程,而是“截获”请求和响应,这样它们就可以作为队列的一部分进行处理?

共有1个答案

江奕
2023-03-14

我认为你说得对,tomcat喜欢用自己的线程处理每个请求。对于几个并发线程来说,这可能是有问题的。我有以下建议:

>

  • 在server.xml.中配置连接器元素的最大线程和接受计数属性通过这种方式,您可以将生成的线程数量限制到阈值。一旦达到该限制,请求就会排队。接受计数属性用于设置此队列大小。最简单的实施,但不是一个好的长期解决方案

    在server.xml中配置多个Connector元素,并通过在server.xml.中添加Execator元素使它们共享一个线程池您可能希望将tomcat指向您自己的执行器接口实现。

    如果您想要更好的晶粒控制,不需要如何服务请求,请考虑实现您自己的连接器。服务器中连接器元素的“协议”属性。xml应该指向您的新连接器。我这样做是为了添加一个自定义SSL连接器,效果非常好。

    您是否会将此问题简化为使tomcat在请求/连接数量方面更具可伸缩性的一般要求?通用的解决方案是配置负载平衡器来处理tomcat的多个实例。

  •  类似资料:
    • 问题内容: 您能否解释一下已经在各种servlet实现中实现的两种方法: 每个连接线程 每个请求的线程 以上两种策略中的哪一种可以更好地扩展,为什么? 问题答案: 以上两种策略中的哪一种可以更好地扩展,为什么? 每个请求线程的可伸缩性比每个连接线程的可伸缩性更好。 Java线程非常昂贵,通常每个线程都使用1Mb的内存段,无论它们是活动的还是空闲的。如果为每个连接提供自己的线程,则该线程通常在连接的

    • 我尝试分析一个gRPC java服务器。我主要看到下面的一组线程池。 null

    • 想象一下,我用几个同步的方法< code>First了类。当线程< code >首先锁定类时,它是锁定每个方法还是每个类?例如,下面的代码会发生死锁吗?

    • 问题内容: 我正在尝试捕获WebBrowser控件的内容。可以完美地工作,但是WebBrowser控件的文档中不支持它。我一直在尝试寻找另一种捕获WebBrowser控件的内容并将其保存到本地图像文件的方法。 是否有人有任何变通办法或其他方法将WebBrowser控件的内容保存到本地图像文件? 问题答案: Control.DrawToBitmap并不总是能正常工作,因此我诉诸于以下提供更一致结果的

    • 我对所有这些异步/多线程lib和本地clojure功能感到迷茫。 我有一个Web服务,它调用外部API,转换它响应,然后回馈给客户端。现在是用Python编写的。我想让每个客户端在单独的线程中执行其请求,这样它们就不会等待彼此完成,或者服务器是异步的。不涉及繁重的计算,只需等待IO。 我原以为使用clojure会很容易,但是我忽略了一些东西...Aleph是异步服务器吧?然而,当我在请求处理程序中