如何防止 AJAX 请求排队? [复制]

Posted

技术标签:

【中文标题】如何防止 AJAX 请求排队? [复制]【英文标题】:How do you prevent AJAX request queuing? [duplicate] 【发布时间】: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。

任何帮助将不胜感激。

【问题讨论】:

大多数浏览器都对同一服务器的并发请求数施加了限制,因此这很可能是您使用的任何浏览器的浏览器限制 浏览器也限制了它发出的活动请求的数量。该数字因浏览器而异。有可能您的浏览器已达到最大值。 有没有办法验证浏览器是否应用了限制? 【参考方案1】:

正如其他 cmets 所指出的,大多数网络浏览器将并发请求限制在同一台服务器上,对于许多版本的 IE 和 Firefox 甚至 Chrome,这个数字是 6,这反映了您所看到的问题。供参考:concurrent connections by browser

如果您可以控制浏览器,则可以在您个人浏览器的设置中或(在 Windows 中)注册表本身中更改此设置。 YMMV,如果需要,请查看说明如何执行此操作。

【讨论】:

仅链接的答案在 *** 上不是很有用。我们的想法是从回答问题的链接中提供相关信息,并将参考资料作为链接包含在内(以防以后其他人查看此答案时链接断开)。您还忘记在此处包含实际答案。我建议将其作为评论发布。 您可以将此添加为评论而不是答案 答案是大多数网络浏览器都限制对同一服务器的并发请求;我添加了链接作为证据和参考。如果我只能在 cmets 中回答,我想实际上提供答案是不好的形式?我会添加一些支持信息,但我应该删除我的答案吗? 谢谢,我明白了——对 SE 来说仍然有点菜鸟——所以在向答案添加更多内容并注意到它被标记为重复之后,我应该删除答案还是留下它,然后我我想我可能应该删除所有这些 cmets,因为它们不会在答案中添加任何内容,只是告诉我如何才能做得更好……我真的很想知道在这种情况下如何最好地自我调节……谢谢输入!

以上是关于如何防止 AJAX 请求排队? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

jQuery ajax:如何防止 chrome DevTools 中的 404 错误垃圾邮件? [复制]

如何防止来自ajax的POST请求(通过firebug获得)

如何防止 Chrome 将 AJAX 请求重定向到 HTTPS?

JS583- 如何防止重复发送ajax请求

如何防止AJAX服务器端传输?

如何锁定文件以防止读取/写入同一文件的多个 ajax 请求?