PHP - длинный опрос, сеанс уничтожен

Я впервые пытаюсь использовать длинный опрос, чтобы обновлять список сообщений пользователей в реальном времени, веб-сокеты мне кажутся слишком сложными. Мое приложение пока работает локально.

Вот код 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.info('data received');
        if (data.updates)
        {
          alert('nouveau message');
          setTimeout(function () { that.checkForUpdates() }, 5000);
        }
      }).fail(function (data)
      {
        console.info(data);
        setTimeout(function () { that.checkForUpdates() }, 10000);
      });
    }

Итак, первая странность заключается в том, что если я установлю async: true, cache: false в параметрах ajax, код не сможет правильно загрузить мой файл updates.php.

Вторая странность для меня заключается в том, что если мой цикл выполняется в течение определенного времени, мой сеанс разрушается.

Почему? Насчет длинного опроса, правильно ли я делаю?

В качестве альтернативы длительному опросу (и без использования WebSockets, если они вам не нравятся) вы можете прочитать о событиях на стороне сервера PHP: developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/‌…

Ezenhis 11.12.2018 11:46

@Ezenhis спасибо, это интересно. Хотя кажется, что Edge и IE не поддерживают это, и мне нужно простое кросс-браузерное решение ... Но я буду помнить о событиях на стороне сервера.

Snite 11.12.2018 11:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
46
0

Другие вопросы по теме