gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:24:00 25 4
gpt4 key购买 nike

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

$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>");
}

每次刷新页面时,都会进行更新,并且自上次刷新以来添加的任何记录都会添加到列表中。在聊天室中,这并不理想,那么有没有一种方法可以在尽可能少地干扰用户的情况下不断检查新记录?谢谢!

最佳答案

您坚持使用当前的技术堆栈进行轮询。 MySQL 没有任何好方法向您推送通知,告诉您有新的东西要看。

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

以尽可能低的成本处理轮询的一些指南。

  • 将用户期望设置为消息延迟几秒而不是毫秒。
  • 根据需要尽可能频繁地查询以满足对延迟的期望。
  • 避免每次查询都查询大量数据。你怎么能这样做?

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

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

    C。提出您的疑问SELECT whatever WHERE timestamp > saved_timestamp ORDER BY timestamp所以你只能按顺序从你的 table 上得到新的物品。如果您的系统不是很忙,这些 SELECTs 通常不会返回任何行。那挺好的。

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

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

  • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

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

    关于javascript - 如何在PHP中不断刷新mysql查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60710125/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com