1

我正在计划一个类似聊天的 Web 应用程序,每当一个用户发布内容时,所有其他用户(即浏览器指向该站点的人)都会得到即时更新。对此的常见选择是使用长轮询 AJAX 请求的彗星式消息传递。用 jQuery 编写客户端部分并不是什么大问题。

但我想知道如何最好地在 PHP 中实现服务器端部分。帖子/消息将存储在 MySQL 中,问题是:在将新帖子写入数据库后,我如何通知所有等待的请求,数据可供他们使用而不使用轮询?轮询会起作用,但它很丑陋并且浪费资源,因此,这是我不想要的:

while (timeout not reached) {
    if ($database->has_changes())
        break;
    sleep(1);
}
handle_changes_if_any();

是否有某种 MySQL 功能可以帮助我?某种IPC会有所帮助吗?服务器运行 Apache。

4

1 回答 1

0

您已经提到了一种可能的解决方案,即使用 AJAX 轮询定期查询脚本以获取更新。轮询将在客户端完成,与服务器端无关。

另一种选择是使用彗星服务器,例如Meteor。使用这种方法,您的 PHP 脚本可以将新消息通知彗星服务器,并且连接的客户端将接收更新。然后由您来编写 JavaScript 以向用户显示更新。

于 2010-08-18T19:03:26.170 回答