每1秒发送一次ajax帖子检查数据库修改是一个好习惯吗?

时间:2018-02-07 12:01:47

标签: php jquery mysql ajax

我需要检查数据库中是否有特定状态的修改。为了实时完成,我想每1秒发送一次Ajax Post以检查MySQL数据库是否有一些修改。

但我对表现有疑问。该页面可能会持续数小时。然后,我不知道每一秒都做一个好主意,一个" SELECT QUERY"在数据库中。

有人知道是否有一些问题让页面打开几个小时,每秒发送一次jjax帖子,检查MySQL数据库(选择查询)并用结果更改页面(当状态修改时)?

PS:(1)无法使用websocket。 (2)我使用PHP和MySQL。 (3)服务器是运行XAMPP的Windows。

代码是(它有效):

function status_check(){
    var AJAX_URL = $('#AJAX_URL').val();
    setTimeout(function(){
        var body = $('body');
        var ss = body.attr('data-step');
        var formData = {
            ss: ss,
            a: 'cn'
        }

        $.ajax({
            type: 'POST',
            url: AJAX_URL,
            data: formData,
            dataType: "json",
            success: function(data){
                // change the HTML with the returned data if has modification
            },
            error: function(xhr, status, thrown){
                console.log(xhr);
            }
        });

        status_check();
    }, 1000);
}

$(document).ready(function(){
  status_check();
});

1 个答案:

答案 0 :(得分:0)

这种做法称为短轮询,在客户端请求和数据库查询中资源密集。

正如您已经提到的,理想的解决方案可能是websockets,但只有PHP,这是不可能的。

另一种方法可能是长轮询。使用长轮询,客户端 - 服务器连接将保持打开状态,直到响应可用。在服务器上看起来有点像那样。

do {
    $newData = getNewData();
    if($newData) {
        echo $newData;
    } else {
        sleep(1);
    }
} while (!$newData);
相关问题