Я впервые пытаюсь использовать длинные опросы, чтобы обновлять список сообщений моих пользователей в режиме реального времени, веб-сокеты кажутся мне слишком сложными.На данный момент мое приложение работает локально.
Вот код PHP, он еще не завершен, я пока что только делаю тесты:
ini_set('max_execution_time', 0);
ignore_user_abort(false);
$isUptodate = (bool) file_get_contents($this->uptodateFile);
while ($isUptodate === true)
{
sleep(1);
$isUptodate = (bool) file_get_contents($this->uptodateFile);
}
$updateUptodateFile = fopen($this->uptodateFile, 'w');
fwrite($updateUptodateFile, 'true');
$jsonData = json_decode(file_get_contents($this->updateFile), true);
echo json_encode(['updates' => count($jsonData)]);
А вот код JS (опять же, это попытки, задержки setTimeout будут изменены позже, когда код будет работать нормально):
checkForUpdates: function ()
{
var that = this;
$.ajax({
url: 'updates.php',
type: 'GET',
dataType: 'json',
timeout: 10000
}).done(function (data)
{
console.log('data received');
if (data.updates)
{
alert('nouveau message');
setTimeout(function () { that.checkForUpdates() }, 5000);
}
}).fail(function (data)
{
console.log(data);
setTimeout(function () { that.checkForUpdates() }, 10000);
});
}
Итак, первое странное, что, если я установлю async: true, cache: false
в параметрах ajax, код не будет правильно загружать мой файл updates.php.
Вторая странная вещь для меня - это то, что если мой цикл выполняется в течение определенного времени, мой сеанс разрушается.
Почему?По поводу длинного опроса, я правильно делаю?