PHP-长时间轮询,会话被破坏

时间:2018-12-11 10:39:51

标签: javascript php ajax long-polling

我第一次尝试使用长时间轮询来实时更新我的​​用户消息列表,websocket对我来说似乎太复杂了。我的应用程序现在在本地运行。

这是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);
      });
    }

所以,首先奇怪的是,如果我在ajax参数中设置async: true, cache: false,则代码将无法正确加载我的updates.php文件。

第二件令我感到奇怪的事情是,如果我的循环运行一定时间,则我的会话将被破坏。

为什么?关于长时间轮询,我这样做对吗?

0 个答案:

没有答案