亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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個贊

你被當前的技術??ㄗ×恕ySQL 沒有任何好的方法可以向您推送有新內容可看的通知。

(您可以考慮添加一個消息隊列子系統,例如 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 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號