2013-08-04 39 views
2

我的理解是,在Tomcat中,每个请求将占用一个Java /(因此OS)线程。Tomcat - 每个请求一个线程 - 或其他选择?

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

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

+1

我最近在工作中遇到了同样的问题。我读了这篇文章,它回答了我的许多问题:http://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.html –

+0

如果你有很长的要求发生,为什么你会希望与其他请求/线程异步运行时,将其添加到每个其他请求的队列中,而不是放在它自己的线程中? –

回答

5

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

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

  • 在server.xml中配置多个Connector元素,并通过在server.xml中添加一个Executor元素来共享一个线程池。您可能想要将tomcat指向您自己的Executor接口实现。

  • 如果您想要更细粒度的控制,请不要请求服务的方式,请考虑实施您自己的连接器。 server.xml中Connector元素的'protocol'属性应指向您的新连接器。我已经这样做了添加一个自定义的SSL连接器,这很好。

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

相关问题