Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个长时间运行的请求是java异步servlet的有效用例吗?_Java_Servlets_Asynchronous - Fatal编程技术网

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

这个长时间运行的请求是java异步servlet的有效用例吗?,java,servlets,asynchronous,Java,Servlets,Asynchronous,我一直在阅读有关异步servlet的文章,试图看看它是否适合我的用例 服务器将接收长时间运行的请求,这些请求需要时间从数据库读取,并处理每条消息 以下是基本流程: 客户端请求验证某些数据 服务器收到长时间运行进程的请求(约1-2分钟) 请求需要与db(在我的例子中是redis)对话,以批量获取100000个文档 对每个文档进行处理,如果该文档有效,则将其写入客户端。类似地,最多可向客户端写入25个示例文档 处理完整数据集时(但写入的文档不超过25个),将计算并发送结果 连接已成功关闭 所以有一

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

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

以下是基本流程:

  • 客户端请求验证某些数据
  • 服务器收到长时间运行进程的请求(约1-2分钟)
  • 请求需要与db(在我的例子中是redis)对话,以批量获取100000个文档
  • 对每个文档进行处理,如果该文档有效,则将其写入客户端。类似地,最多可向客户端写入25个示例文档
  • 处理完整数据集时(但写入的文档不超过25个),将计算并发送结果
  • 连接已成功关闭
  • 所以有一个db等待,所有类似的请求都会有,然后处理每个文档,这在同一个线程中发生

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

    此外,如果我使用异步servlet,那么尝试使用线程池并行处理文档会有什么好处?看起来我不会得到任何额外的好处,但我也想澄清一下这一点

    谢谢你的帮助

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

    对。事实上,所有手册都告诉您“异步servlet在这方面很有用”

    此外,如果我使用异步servlet,那么尝试使用线程池并行处理文档会有什么好处?看起来我不会得到任何额外的好处,但我也想澄清一下这一点

    无关的。异步servlet只是释放资源,所以即使有很多servlet在等待结果,您的服务器也会继续响应请求。它与响应异步请求的速度无关


    您从优化逻辑中获得的任何好处都将对服务器和用户有利,但如果您使用的是异步servlet或同步servlet,这都会很好。

    感谢您的回复!听起来这对我很有用。我要做的优化是针对100000个文档,这样它们就不会在一个for循环中得到处理。您是对的,任何优化对于最终结果都可能更好,因为这将是一个常用的客户端功能。如果用户想要取消这个长时间运行的请求,异步servlet如何处理关闭/断开连接?AsyncListener是这个钩子的正确位置吗?