开发者

Long polling timeout issue

开发者 https://www.devze.com 2023-02-10 01:45 出处:网络
I\'m doing a long poll method chatroom. But it seems开发者_Python百科 that, when a long poll occurs and I refresh the page in chrome OR i try to send another async request everything times out (i.e i

I'm doing a long poll method chatroom. But it seems开发者_Python百科 that, when a long poll occurs and I refresh the page in chrome OR i try to send another async request everything times out (i.e i cant load my domain again until i close/reopen the browser).

My client side code is:

 $(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();
    }
  });
}

And my serverside:

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

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

Any ideas? Assume no syntax errors.


I can see you have already answered your own question, but I recently had a similar problem and found another way to handle it is to disable the setTimeout on ajax call, then restart it on success. That way you aren't pinging your server for information when it isn't ready to give it.


I figured it out from this question: stackoverflow.com/questions/4457178/… - php locks a given session until the page is done loading so the second ajax call wasn't able to go through. You have to release the lock by calling session_write_close();

0

精彩评论

暂无评论...
验证码 换一张
取 消