如何在 PHP 中使 mysql 查询不断刷新?

我正在制作一个基本的聊天室。我的代码:


$conn = ("127.0.0.1","root","","mymessages");


$stmt = "SELECT * FROM posts ORDER BY timestamp LIMIT 100";

$result = mysqli_query($conn, $stmt);


if(!$result) {

    echo("Query failed" . mysqli_error());

}


while ($row = mysqli_fetch_assoc($result)) {

    $messagefname = $row['fname'];

    $messagelname = $row['lname'];

    $subject = $row['subject'];

    $content = $row['content'];

    $day = $row['day'];

    $month = $row['month'];

    $year = $row['year'];

    $hour = $row['hour'];

    $min = $row['minute'];



    echo("<font size='1.5' face='Arial'>");

    echo("Sent by " . $messagefname . " " . $messagelname . " at " . $hour . ":" . $min. " on " . $day . "/" . $month . "/" . $year . "<br>");

    echo("</font><br><font size='4' face='Arial'><b>");

    echo($subject);

    echo("</font><br><font size='3' face='Arial'></b>");

    echo($content);

    echo("</font><br><br><hr><br>");

}

每次刷新页面时,此更新以及自上次刷新后添加的所有记录都会添加到列表中。在聊天室中,这并不理想,那么有没有办法让它不断检查新记录,同时尽可能少地对用户造成干扰?谢谢!


慕神8447489
浏览 109回答 1
1回答

子衿沉夜

你被当前的技术栈卡住了。MySQL 没有任何好的方法可以向您推送有新内容可看的通知。(您可以考虑添加一个消息队列子系统,例如 RabbitMQ,但这需要对应用程序的结构进行重大更改)。以尽可能低的成本处理轮询的一些准则。将用户期望设置为消息延迟几秒钟而不是毫秒。尽可能频繁地查询以满足对延迟的期望。避免每次查询都查询大量数据。你怎么能那样做?一种。每次运行查询时保存最新的时间戳湾。不要使用SELECT *.&nbsp;而是给出您实际需要的列的名称。这让 MySQL 的优化器有助于降低查询成本。C。进行查询,SELECT whatever WHERE timestamp > &nbsp;saved_timestamp ORDER BY timestamp这样您就只能按顺序从表中获取新项目。如果您的系统不是很忙,这些 SELECT 通常不会返回任何行。那挺好的。d。确保在时间戳和 SELECT 语句中的其他列上有一个多列索引。这称为覆盖指数。e.&nbsp;打开与 MySQL 的连接后,立即发出此 SQL 语句。它可以让 MySQL 获取您的数据,而不会与其他向表中插入行的 MySQL 客户端争用。SET&nbsp;TRANSACTION&nbsp;ISOLATION&nbsp;LEVEL&nbsp;READ&nbsp;UNCOMMITTED;如果您在用户的浏览器中使用 AJAX 执行此操作,您希望在 AJAX 请求中包含最新的时间戳,以便您可以向每个用户的浏览器提供所需的新项目。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript