【问题标题】:How to run multiple servlets execution in parallel for Tomcat?如何为 Tomcat 并行运行多个 servlet 执行?
【发布时间】:2012-04-28 08:02:56
【问题描述】:

我有一个 Tomcat 应用程序,我需要两个不同的 servlet 或同一个来并行响应我的请求。案例是我有第一个请求要求下载医学影像,并且我有另一个 AJAX 客户端请求在第一个请求完全完成之前获取图像。但是由于某种原因,直到第一个请求结束,服务器才响应我的第二个请求。

为了实现并发 servlet 执行,必须进行哪些更改?我们有一个非常好的服务器,它有多个驱动器、多个内核。我正在使用 Tomcat 6。任何可以探索的想法都会很棒。

【问题讨论】:

  • 您是否使用任何具有独占访问权限的资源?

标签: java jakarta-ee tomcat concurrency


【解决方案1】:

如果发生这种情况,则与 Tomcat 无关。可能您在某处使用同步(隐式或显式)。

但是您可以显式管理线程池:

 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>

<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

即您可以指定最大线程数或使用线程池。更多信息在这里http://tomcat.apache.org/tomcat-5.5-doc/config/http.html

【讨论】:

  • 我的第一个请求必须访问第三方服务器以检索图像。我的第二个请求来自不同的 servlet,只需要读取第一个 servlet 正在编写的内容。我怎样才能找到谁在锁定一切?
  • 那么第一个 servlet 正在写入数据,而第二个正在尝试读取数据?我相信这是关键。你用什么来读写数据?
  • 第一个 servlet 有传入文件,一旦写入我想它们没有被锁定或任何东西。第二个尝试读取文件,如果失败(由于文件锁定),它将在 1 秒后重试。但是我看到第二个请求会暂停,直到第一个请求结束。这就是我想知道 Tomcat 的原因。
  • Tomcat 本身不会阻塞线程。绝对问题出在Tomcat之外。您究竟将哪些类用于文件 IO 操作?如果有自定义代码 - 您可以检查它或将其发布在这里吗?
  • 好的。 Tomcat 可以处理线程,并为不同的请求使用不同的线程。您可以信赖这 100%。查看我的答案更新。
猜你喜欢
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 2011-03-02
  • 2019-01-18
  • 2017-12-20
  • 1970-01-01
相关资源
最近更新 更多