Avatar ·

什么是 Long-Polling、WebSockets、SSE 和 Comet?如何在 PHP 中实现?

大家好!我是一名初学 PHP 的开发者,正在写一个简单的网站聊天功能。目前的工作方式是:用户通过 AJAX 发送消息,消息保存到数据库,其他用户手动刷新页面(F5)才能看到新消息。这非常不方便! 我听说过一些“实时”技术:Long-Polling、WebSockets、SSE 和 Comet。但我对这些术语感到困惑。据我理解,Comet 根本不是一种技术,而是一种模式? 我需要新消息能立即在所有用户那里显示,无需刷新页面。我使用的是 PHP 8.2、Apache 和 MySQL。请问对于聊天功能,应该选择哪种方法?我试过用 setInterval() 每 2 秒轮询的简单方案,但 20 个用户时服务器就开始卡顿。 以下是我当前代码的一部分(检查新消息): ```php // check_new_messages.php $lastId = $_GET['last_id']; $stmt = $pdo->prepare("SELECT * FROM messages WHERE id > ? ORDER BY id ASC"); $stmt->execute([$lastId]); $messages = $