Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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 有了mod_jk、tomcat和jersey,如何让长时间运行的请求保持有效?_Java_Tomcat_Jersey_Httpclient - Fatal编程技术网

Java 有了mod_jk、tomcat和jersey,如何让长时间运行的请求保持有效?

Java 有了mod_jk、tomcat和jersey,如何让长时间运行的请求保持有效?,java,tomcat,jersey,httpclient,Java,Tomcat,Jersey,Httpclient,在客户端,我们使用HttpClient进行通信。在服务器端,我们使用Jersey和tomcat 我们的要求是这样的 客户端->负载平衡器->服务器 问题是,客户端将向服务器发出请求;该请求溢出了mod_jk的180秒超时,导致负载平衡器终止连接。我需要的是某种方式向mod_jk发出信号“是的,此连接处于活动状态并正在进行中”,这样它就不会终止连接。或者,如果我们能向mod_jk发出信号“这个请求可能需要很长时间”,那就太好了 我们目前在负载平衡器中的解决方案不是很好,我们将套接字超时时间提高到了

在客户端,我们使用HttpClient进行通信。在服务器端,我们使用Jersey和tomcat

我们的要求是这样的

客户端->负载平衡器->服务器

问题是,客户端将向服务器发出请求;该请求溢出了mod_jk的180秒超时,导致负载平衡器终止连接。我需要的是某种方式向mod_jk发出信号“是的,此连接处于活动状态并正在进行中”,这样它就不会终止连接。或者,如果我们能向mod_jk发出信号“这个请求可能需要很长时间”,那就太好了

我们目前在负载平衡器中的解决方案不是很好,我们将套接字超时时间提高到了20分钟。更好的解决方案是让服务器发出它仍在工作的信号。最好的解决方案是让请求运行得更快(最多12分钟)


我怎样才能让服务器发出它仍在前进的信号?不幸的是,发送部分数据对我们来说并不是很好,因为这个请求是为了获得一个昂贵的大型对象,而该对象实际上是不可流化的。

Tomcat对响应输出流有不同的实现

不同的行为是由连接负载平衡器和Tomcat的AJP连接器引起的(只是猜测您使用的是AJP)。使用Tomcat standalone,用户可以写入响应输出流,并对内容进行缓冲。当您写入AJP连接器支持的响应输出流时,内容会立即刷新。这是有道理的,因为如果没有一个从Tomcat到负载平衡器的恒定数据流,它将在之后“挂起”,而将其视为超时


因此,我建议您在准备真正的响应付费负载时,找到一些连续或定期发送“一些数据”的方法。

告诉负载平衡器它不应该超时是一回事,您如何将此信息传达回最初发起请求的客户机/用户?在客户端有一个“加载条”。在它旁边,我们有一个加载状态的东西,让他们知道加载的是什么。客户端是一个swing应用程序。我应该注意到,负载平衡器对于这个等式来说是新的。在我们所有的客户端都运行到一台服务器之前(一切正常).谢谢你的帮助。我本来希望有办法把垃圾信息送到管道里,但事实就是这样。