gpt4 book ai didi

multithreading - Tomcat - 每个请求一个线程 - 或其他替代方案?

转载 作者:行者123 更新时间:2023-11-28 21:55:30 33 4
gpt4 key购买 nike

我的理解是,在 Tomcat 中,每个请求将占用一个 Java/(以及操作系统)线程。

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

有没有办法更改我的 web 应用程序的 tomcat 配置/架构,这样我就不会为每个请求使用线程,而是“拦截”请求和响应,以便将它们作为队列的一部分进行处理?

最佳答案

我认为您说得对,tomcat 喜欢在它自己的线程中处理每个请求。对于多个并发线程来说,这可能会有问题。我有以下建议:

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

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

  • 如果您想要更精细地控制请求的服务方式,请考虑实现您自己的连接器。 server.xml 中连接器元素的“协议(protocol)”属性应该指向您的新连接器。我这样做是为了添加自定义 SSL 连接器,效果很好。

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

关于multithreading - Tomcat - 每个请求一个线程 - 或其他替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18039393/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com