【发布时间】:2017-01-03 12:48:43
【问题描述】:
我遇到了一个问题,来自同一浏览器和客户端的 AJAX 请求似乎以 6 个请求的块排队,我无法确定原因。
这是我用来证明这种情况发生的代码。
<?php
if ( isset($_GET['index'])
and isset($_GET['start']) ) {
session_write_close();
sleep(2);
header('Content-Type: application/json');
echo json_encode(
array(
'index' => $_GET['index'],
'start' => $_GET['start']
)
);
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="/jquery-1.12.4.min.js"></script>
<script language="javascript">
jQuery(window).load(function() {
for(var i = 0; i < 10; i++) {
jQuery.ajax({
url: '/index.php',
dataType: 'json',
data: { index: i, start: Math.floor(Date.now() / 1000) },
success: function(response) {
console.log('Request '+response.index+', start: '+response.start+', end: '+Math.floor(Date.now() / 1000));
}
});
}
});
</script>
</head>
<body></body>
</html>
无论 PHP 睡眠时间或服务器端是否包含 session_write_close();,响应都会以 6 个一组交错返回。以下是上述代码的控制台日志输出示例,其中有一行描绘延迟。
(index):13 Request 0, start: 1472236910, end: 1472236912
(index):13 Request 1, start: 1472236910, end: 1472236912
(index):13 Request 2, start: 1472236910, end: 1472236912
(index):13 Request 3, start: 1472236910, end: 1472236912
(index):13 Request 4, start: 1472236910, end: 1472236912
(index):13 Request 5, start: 1472236910, end: 1472236912
----- Delay that matches the PHP sleep time after 6 responses -----
(index):13 Request 6, start: 1472236910, end: 1472236914
(index):13 Request 7, start: 1472236910, end: 1472236914
(index):13 Request 9, start: 1472236910, end: 1472236914
(index):13 Request 8, start: 1472236910, end: 1472236914
我已经验证我的 Apache 配置没有指定 MaxClients,所以它应该默认为 256。
任何帮助将不胜感激。
【问题讨论】:
-
大多数浏览器都对同一服务器的并发请求数施加了限制,因此这很可能是您使用的任何浏览器的浏览器限制
-
浏览器也限制了它发出的活动请求的数量。该数字因浏览器而异。有可能您的浏览器已达到最大值。
-
有没有办法验证浏览器是否应用了限制?
标签: javascript php jquery ajax apache