2016-08-26 6 views
0

私は、同じブラウザとクライアントからのAJAXリクエストが6リクエストのチャンクでキューに入れられているように見えますが、その理由を特定できないという問題が発生しています。AJAXリクエストキューイングをどうやって防ぐのですか?

これは私がこれが起こっていることを証明するために使用したコードです。

<?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の設定は、それがすべてのヘルプをいただければ幸い256

をデフォルトにする必要がありますのでMaxClientsのは、指定されていないことを確認しました。

+0

ほとんどのブラウザでは、同じサーバに対する同時リクエストの数に制限があるため、使用しているブラウザのブラウザの制限がある可能性があります –

+0

ブラウザには、送信するアクティブなリクエスト数に制限がありますでる。その数はブラウザによって異なります。ブラウザを最大限に使用している可能性があります。 –

+0

ブラウザに制限が適用されていることを確認する方法はありますか? –

答えて

1

他のコメントが指摘しているように、ほとんどのWebブラウザでは、IE、Firefox、さらにはChromeの多くのバージョンで同じサーバーへの同時リクエスト数が制限されています。 concurrent connections by browser

ブラウザを制御している場合、この設定はブラウザの設定ごとに変更することも、レジストリ自体で(ウィンドウで)変更することもできます。 YMMV、必要に応じてこれを行う方法の説明をご覧ください。

+1

リンクのみの回答はStackOverflowではあまり役に立ちません。このアイデアは、質問に答えるリンクからの関連情報を提供し、リンクとして参照資料を含めることです(他の人がこの回答をレビューした後にリンクが壊れた場合に_)。また、実際の回答をここに含めるのを忘れてしまった。代わりにこれをコメントとして投稿することをお勧めします。 – Sherif

+0

これはコメントではなく、回答として追加することができます –

+0

答えは_ほとんどのWebブラウザが同じサーバーへの同時リクエストを制限することです。私は証拠と参照としてリンクを追加しました。私はちょうど私がコメントに答えることができれば実際に答えを提供するのは悪いフォームだと思いますか?私は少しの支持的な情報を追加しますが、代わりに私の答えを削除する必要がありますか? – derelict

関連する問題