情景: -
客户端应用程序 - 基于JavaScript
前端处理 - 使用XAMPP在Apache上托管的PHP(php 5.3.8,xampp 1.7.7,Apache 2.2.21)
后端处理 - 托管在Tomcat上的Java REST API
描述
浏览器将发布数据发送到php服务器,php验证并根据需要修改发布数据,然后使用curl打开与后端服务器(tomcat服务器托管Jersey REST API)的连接,然后返回响应将php返回的内容发送到浏览器。
我面临的问题: -
Tomcat服务器大约需要3到10分钟来处理请求(取决于有效负载和请求类型,有效负载越高,执行时间就越多)。当调用更高的有效负载请求或计时请求(7-10分钟)API时,会发生套接字异常,说明在tomcat托管的REST API(后端)上“通过对等方重置连接”。前端处理php逻辑没有任何反应。由于连接被重置,因此Java REST API无法发送响应,因为php上没有任何事情发生,因此无法纠正发生的任何事情。
现在,如果通过REST客户端(Chrome扩展程序)进行相同的耗时或有效负载API调用,则API会正常处理并将响应返回给REST客户端。所以它归结为php或Apache前端的任何问题。
已经尝试: 在httpd-default.conf中 -
KeepAlive on
超时2100
KeepAliveTimeout到2100
在php curl调用 -
curl_setopt($ch, CURLOPT_TIMEOUT,0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,20);
or
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,20);
curl_setopt($ch, CURLOPT_HTTPHEADER,
array('Content-Type: application/json ',
'Content-length: '.$len,//length of content
'Connection: keep-alive',
'Keep-Alive: 2100'));
set_time_limit(0);
xdebug关掉了
default_socket_timeout = 2100
并且已经玩了很多组合,但没有成功的结果。
注意 - Apache和Php日志文件中没有任何内容或Php脚本中发生任何异常,所以我甚至无法深入研究问题的来源。
修改:
我注意到即使是ajax也没有出现任何错误,只需继续等待。如果Apache正在重置连接,那么ajax也应该收到连接重置错误。