为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕神8447489 2022-05-22 17:36:29
我正在制作一个基本的聊天室。我的代码:$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>");}每次刷新页面时,此更新以及自上次刷新后添加的所有记录都会添加到列表中。在聊天室中,这并不理想,那么有没有办法让它不断检查新记录,同时尽可能少地对用户造成干扰?谢谢!
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

你被当前的技术栈卡住了。MySQL 没有任何好的方法可以向您推送有新内容可看的通知。

(您可以考虑添加一个消息队列子系统,例如 RabbitMQ,但这需要对应用程序的结构进行重大更改)。

以尽可能低的成本处理轮询的一些准则。

  1. 将用户期望设置为消息延迟几秒钟而不是毫秒。

  2. 尽可能频繁地查询以满足对延迟的期望。

  3. 避免每次查询都查询大量数据。你怎么能那样做?

    一种。每次运行查询时保存最新的时间戳

    湾。不要使用SELECT *. 而是给出您实际需要的列的名称。这让 MySQL 的优化器有助于降低查询成本。

    C。进行查询,SELECT whatever WHERE timestamp >  saved_timestamp ORDER BY timestamp这样您就只能按顺序从表中获取新项目。如果您的系统不是很忙,这些 SELECT 通常不会返回任何行。那挺好的。

    d。确保在时间戳和 SELECT 语句中的其他列上有一个多列索引。这称为覆盖指数

    e. 打开与 MySQL 的连接后,立即发出此 SQL 语句。它可以让 MySQL 获取您的数据,而不会与其他向表中插入行的 MySQL 客户端争用。

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

如果您在用户的浏览器中使用 AJAX 执行此操作,您希望在 AJAX 请求中包含最新的时间戳,以便您可以向每个用户的浏览器提供所需的新项目。


查看完整回答
反对 回复 2022-05-22
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信