php - 长轮询超时问题

标签 php javascript ajax comet

我正在做一个长轮询方法聊天室。但似乎,当发生长轮询并且我在 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();
      }
    }

有什么想法吗?假设没有语法错误。

最佳答案

我可以看到你已经回答了你自己的问题,但我最近遇到了类似的问题并找到了另一种处理它的方法是在 ajax 调用上禁用 setTimeout,然后在 上重新启动它>成功。这样您就不会在服务器未准备好提供信息时向其发送信息。

关于php - 长轮询超时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4965486/

相关文章:

php - 基于 Woocommerce 中特定产品变化的购物车商品折扣

php - 如何在 PHP 中获取图像质量

php - 具体的正则表达式函数

javascript - jquery中括号内有空格

javascript - 将 axios 中的 Prop 传递给 Vue.js?

php - ajax调用后无法获取div类="rateit"只读模式中的值

使用更新的 Excel 格式 .xlxs 导入数据时出现 PHP EXCEL 问题

javascript - 如何检测 WebBrowser 控件中的 Javascript 执行

javascript - 无法从 html 检索数据

c# - ajax 调用 c# mvc 发送 post 和 get