长轮询的基本思想是您发送一个请求,然后服务器不会响应或终止该请求,直到某些所需的条件。即服务器端不会通过发送响应来“完成”服务请求。您可以通过在服务器端循环执行来实现这一点。
想象一下,在每个循环中,您都执行数据库查询或任何必要的操作,以确定您需要的条件现在是否为真。只有当它是你打破循环并将响应发送给客户端。当客户端收到响应时,它会立即重新发送“长轮询”请求,这样就不会错过下一个“通知”。
用于此的服务器端 PHP 代码的简化示例可能是:
// Set the loop to run 28 times, sleeping 2 seconds between each loop.
for($i = 1; $i < 29; $i++) {
// find out if the condition is satisfied.
// If YES, break the loop and send response
sleep(2);
}
// If nothing happened (the condition didn't satisfy) during the 28 loops,
// respond with a special response indicating no results. This helps avoiding
// problems of 'max_execution_time' reached. Still, the client should re-send the
// long-polling request even in this case.