Facebook 如何防止在长轮询空响应中超过 max_execution_time?

How does facebook prevent exceeding max_execution_time in long polling empty responses?

那么,facebook return 200 status code 是怎么在没有新的时候 message/update 的?

我尝试了长轮询并且有效。我现在面临的唯一问题是,当轮询没有 returning 任何东西时,我遇到了 500 内部服务器错误(超过 max_execution_time)。

我不想改变投票的 "max_execution_time",但我想要 return 一个 200 OK 状态代码,即使没有新的 messages/updates。

编辑
我从各种来源阅读过,包括 Whosebug(抱歉,我读了太多,无法在这里全部引用)说我应该 return 一个空响应以获得 200 状态代码。

现在,问题是:

如何在没有新的 message/update 时 return 空主体响应(而 "while" 循环是 运行 并且即将到达 max_execution_time ) 以防止 500 Internal server error (exceeded max_execution_time).

用更简单的术语来说:
如何 return 在 while 循环到达超时之前清空响应

好的,我找到了一个解决方法,或者一个巧妙或相当讨厌的解决方案哈哈!

this 线程中一位名叫 Adeel 的用户的评论给了我这个想法。

我所做的是为未来 30 秒设定一个时间:

$future = date("Y-m-d H:i:s", strtotime("+30 seconds"));

while ($last_number < $new_number){
    $now = date("Y-m-d H:i:s");
    if($now == $future){
        break 1;
    }

    //some codes for iteration and updating $last_number in this while loop
}

echo json_encode();

我不知道这是否是实现我的想法的最佳方法,但这是迄今为止唯一可行的方法。

如果你们有更好的解决方案,我很乐意知道。

所以最后只好跳出循环哈哈 傻傻的cou