长轮询问题

时间:2013-11-24 14:51:36

标签: php jquery mysql long-polling

我有一个奇怪的问题,我正在进行长时间轮询以检查MySQL表中是否有新内容出现,一切正常,我会在表中出现消息时立即收到消息。但问题是当我试图重新加载我的页面时(F5)我必须等到服务器端功能完成然后我的页面刷新。

例如我的长轮询开始和我在执行的第一秒刷新页面,我必须等待29秒才能刷新页面。

有谁知道最近发生了什么?

提前致谢!

这是代码

PHP

public function longPolling() {
    if (isset($_POST['timestamp'])) {
        $timestamp = $_POST['timestamp'];
    }
    $end = time() + 20;
    while (time() <= $end) {
        $data = $this->db->select("SELECT id, status, error, start, end, ackby FROM event WHERE start > '$timestamp'", 0);
        if ($data) {
            echo json_encode(array('status' => 1, 'timestamp' => date('Y-m-d H:i:s')));
            break;
        } 
        usleep(25000);
    }
}

JS

function startPoll(timestamp) {
    $.ajax({
        url: 'dashboard/longPolling',
        type: 'POST',
        dataType: 'json',
        timeout: 30000,
        cache: false,
        data: {
            timestamp: timestamp
        },
        success: function(data) {
            if (data != null && data.status == 1) {
                oTable.fnReloadAjax();
                timestamp = data.timestamp;
            }
            setTimeout(function(){
                startPoll(timestamp);
            }, 100)
        }

    });
}

P.S。 ignore_user_abort已停用。

0 个答案:

没有答案