Проблема с длительным тайм-аутом опроса - PullRequest
5 голосов
/ 11 февраля 2011

Я делаю длинный опрос методом чата. Но кажется, что, когда происходит длинный опрос, и я обновляю страницу в chrome ИЛИ я пытаюсь отправить другой асинхронный запрос все время (то есть я не могу загрузить свой домен снова, пока я не закрою / снова не открою браузер).

Мой клиент код стороны:

 $(document).ready(function() {
    setTimeout(
      function () {
        longPollForMessages();
      },
      500
    );
  });

function longPollForMessages()
{
  $.ajax({
    url: url,
    dataType: 'json',
    success: function(data) {     
        $('#chat_messages').append('<div>'+data.messages+'</div>');

        longPollForMessages();
    }
  });
}

И мой сервер:

while(true) {
      $messages = $db->getMessages();

      if (!$messages || sizeof($messages)==0) {
        sleep(1);
      } else {
        echo '{"message":'.json_encode($messages).'}';
        die();
      }
    }

Есть идеи? Предположим, нет синтаксических ошибок.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2011

Я понял это из этого вопроса: stackoverflow.com/questions/4457178/… - php блокирует данный сеанс до тех пор, пока страница не загрузится, поэтому второй вызов ajax не может пройти. Вы должны снять блокировку, вызвав session_write_close ();

0 голосов
/ 14 февраля 2011

Я вижу, вы уже ответили на свой вопрос, но недавно у меня возникла похожая проблема, и я нашел другой способ ее решения - отключить setTimeout при вызове ajax, а затем перезапустить его на success. Таким образом, вы не пингуете сервер для получения информации, когда он не готов предоставить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...