Jquery / Ajax http标头连接关闭忽略

时间:2016-12-17 09:08:21

标签: php jquery ajax http connection

美好的一天, 我有一个显示实时数据的网站。它每30秒更新页面上的DIVS。它通过使用JQUERY加载函数并使用数据调用PHP来实现此目的。因为有些浏览器会对此进行缓存,所以我需要在PHP请求中添加一个随机数,以便它始终更新。根据结果​​,它突出显示DIV。

        $( "#Wheater_Station_Div" ).load( "Weather_data.php?" + Math.random(), function( response, status, xhr ) {
         if ( status == "error" ) {
          $('.Wheater_ST_col_2').css({'background-color' : 'rgba(255, 0, 0, 0.6)'}).effect("highlight", {color: 'red'}, 1000);
         }else{
               $('.Wheater_ST_col_2').effect("highlight", {color: 'green'}, 1000);  
              }
    });

现在关于这个问题。上面的代码导致每个请求在服务器上打开一个新的tcp套接字/端口。当更多客户端连接时,大量套接字空闲且超时。为了避免打开连接,我想将HTTP标头设置为“Connection:close”而不是标准的“keep alive”。

我尝试了我在互联网上找到的每个例子,比如使用Ajax更改标头并尝试从PHP脚本关闭连接。在所有情况下,连接类型永远不会更改并保持活动状态。

例如,下面的代码导致拒绝设置不安全的标题“连接”

jQuery.ajax({
url: URL,
async: boolVariable,
beforeSend: function(xhr)   
{
    xhr.setRequestHeader("Connection", "close");
}   
})

下一个被忽略

    $.ajax({
     url: "Weather_data.php?" + Math.random(),
     headers: { 'Connection': 'close' },
    }).done(function(data) { // data what is sent back by the php page
      $('#Wheater_Station_Div').html(data); // display data
      $('.Wheater_ST_col_2').css({'background-color' : 'rgba(255, 0, 0, 0.6)'}).effect("highlight", {color: 'red'}, 1000);
    });

然后使用以下方法从被调用的PHP脚本中尝试它也会被忽略

ob_end_clean();
header("Connection: close");
ignore_user_abort(true); // just to be safe
ob_start();
echo('Text the user will see');
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush(); // Strange behaviour, will not work
flush(); // Unless both are called !
// Do processing here 
sleep(30);
echo('Text user will never see');

有没有办法在调用脚本后强制关闭连接?或者我应该找到一种重用开放连接的方法,而不会在链接没有变化时使用缓存的一些浏览器的问题。

这是数据更新时捕获的屏幕截图。 JQUERY在DIV中加载PHP。传出端口nr在每次获取请求时都会更改

See the link for capture lines

0 个答案:

没有答案