长轮询超时问题

And*_*Hin 5 javascript php ajax comet

我正在做一个长轮询方法的聊天室.但似乎,当一个长的民意调查发生并且我刷新页面的铬或我尝试发送另一个异步请求一切都超时(即我不能再加载我的域,直到我关闭/重新打开浏览器).

我的客户端代码是:

 $(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();
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

我的服务器端:

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

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

有任何想法吗?假设没有语法错误.

And*_*Hin 0

我从这个问题中弄清楚了:stackoverflow.com/questions/4457178/\xe2\x80\xa6 - php 锁定给定的会话,直到页面加载完成,因此第二个 ajax 调用无法通过。您必须通过调用 session_write_close() 来释放锁;

\n