Apache使某些AJAX请求同步运行

时间:2012-06-06 23:14:56

标签: ajax apache jquery apache2

我有这个奇怪的问题,如果我快速连续向我的Apache 2.2服务器发出两个AJAX请求,有时,第二个请求将在完成之前等待第一个完成。

例如,我有两个请求,一个睡眠时间为10秒,另一个请求立即返回。如果我运行自己立即返回的请求,它将始终在300毫秒内返回。但是,如果我调用请求需要10秒,然后调用立即返回的请求大约50%的时间,第二个请求将等到第一个请求完成,并且chrome将在收到请求之前大约10秒报告该请求响应。另一半时间快速请求将立即返回。

我无法找到任何模式使其表现出某种方式,它有时会随机阻止快速AJAX请求,有时它会按预期运行。我正在开发一台只有我访问的开发服务器,并且我已将多个变量(如MaxRequestsPerChild)设置为较高的值。

有没有人知道为什么Apache似乎随机地将我的AJAX请求转变为同步请求?

以下是我正在运行的代码:

$.ajax({async:true,dataType:'json',url:'/progressTest',success:function(d){console.log('FINAL',d)}}); // Sleeps for 10 seconds
$.ajax({async:true,dataType:'json',url:'/progressTestStatus',success:function(d){console.log('STATUS',d)}}); // Takes ~300ms

这是两个截屏。第一个表现如预期的那样,第二个表示等待慢速进程首先完成(在示例中,超时设置为3秒)。

Expected async behavior

Async behavior

更新:根据以下评论,这似乎与Chrome一次仅执行一项请求有关。有什么想法为什么Chrome会对异步请求设置如此低的限制?

1 个答案:

答案 0 :(得分:1)

问题不在于Apache,而是Google Chrome限制了对开发服务器的并发请求数。我只能猜测为什么它仅限于一个请求。这是一对夫妇:

1)你有很多标签打开吗?并发连接总数有一个限制,如果有许多选项卡使用KeepAlive发出请求,则可能处于该限制,并且只能建立一个连接到您的服务器。如果是这种情况,您可以通过将KeepAlive添加到您自己的输出标题来解决此问题。

2)您是否启用了某些扩展程序。有些扩展会给浏览器带来奇怪的东西。尝试禁用所有扩展程序并发出相同的请求。如果它有效,那么一次启用它们以找到罪魁祸首。