这个长时间运行的请求是java异步servlet的有效用例吗?

时间:2014-04-11 07:19:14

标签: java servlets asynchronous

我一直在阅读异步servlet,试图看看它是否适合我的用例。

服务器将接收长时间运行的请求,这些请求需要花时间从数据库中读取,并处理每条消息。

以下是基本流程:

  1. 客户提出验证某些数据的请求。
  2. 服务器收到长时间运行的请求(约1-2分钟)
    1. 请求需要与db(redis,在我的情况下)交谈以批量获取100,000个文档。
    2. 每个文档都会进行处理,如果有效,则会将其写入客户端。同样,最多可将25个样本文档写入客户端。
    3. 处理完整数据集(但写入的文档不超过25个)时,会计算并发送结果。
    4. 连接已成功关闭。
  3. 所以有一个db等待,所有类似的请求将有,然后处理每个doc,这发生在同一个线程中。

    在这种情况下切换到异步servlet与常规同步servlet有什么好处吗?

    此外,如果我确实使用异步servlet,那么尝试并行处理带有线程池的文档会有什么好处吗?似乎我不会获得任何额外的好处,但也希望澄清这一点。

    感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

  

在这种情况下切换到异步servlet与常规同步servlet有什么好处吗?

是。实际上,所有手册都告诉您"异步servlet对此有用的用例"

  

此外,如果我确实使用异步servlet,那么尝试并行处理带有线程池的文档会有什么好处吗?似乎我不会获得任何额外的好处,但也希望澄清这一点。

无关。异步servlet只是释放资源,因此即使许多servlet正在等待结果,你的服务器也会继续回答请求。它与回答异步请求的速度无关。

优化逻辑带来的好处对服务器和用户都有好处,但如果您使用的是异步servlet或同步servlet,那将会很好。