Como hacer una consulta mysql refrescar constantemente en PHP?

YankueUser:

Estoy haciendo una habitación básica de chat. Mi código:

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

Cada vez que se actualiza la página, estas actualizaciones, y cualquier registro que se han añadido desde la última actualización se añaden a la lista. En una sala de chat, esto no es lo ideal, por lo que hay una manera de tener esta constante control para los nuevos registros con la menor interrupción para el usuario como sea posible? ¡Gracias!

O. Jones:

Le pegan con sondeo con su pila tecnología actual. MySQL no tiene ninguna manera buena para empujar una notificación a usted que hay algo nuevo que ver.

(Se podría considerar la adición de un subsistema de gestión de colas de mensajes, como RabbitMQ por ejemplo, pero que requeriría un gran cambio en la estructura de su aplicación).

Algunas pautas para el manejo de votación, al menor costo posible.

  1. expectativas de los usuarios establecidos en la latencia de unos segundos en los mensajes en lugar de milisegundos.

  2. Consulta con la frecuencia necesaria para cumplir con las expectativas de latencia.

  3. Evitar la consulta de una gran cantidad de datos con cada consulta. Como puedes hacer eso?

    a. Guardar la última marca de tiempo cada vez que se ejecuta una consulta

    si. No utilice SELECT *. En su lugar dar los nombres de las columnas que realmente necesita. Esto le ayuda optimizador de MySQL a reducir el costo de sus consultas.

    C. Haga sus consultas hacen SELECT whatever WHERE timestamp > saved_timestamp ORDER BY timestamplo que sólo recibe los nuevos elementos de la tabla, en orden. Si el sistema no está muy ocupado, estos SELECTs se vuelven a menudo no hay filas. Eso es bueno.

    re. Asegúrese de que tiene un índice de varias columnas de marca de tiempo y las otras columnas en la instrucción SELECT. Esto se llama un índice de cobertura .

    mi. Justo después de abrir su conexión a MySQL, emitir esta sentencia SQL. Permite MySQL ha podido recuperar sus datos con menos contención con otros clientes MySQL insertar filas a la mesa.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

Si usted está haciendo esto con AJAX desde los navegadores de los usuarios, que desea incluir la última fecha y hora en las peticiones AJAX para que pueda ofrecer nuevos los nuevos elementos necesarios para el navegador de cada usuario.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=298327&siteId=1
Recomendado
Clasificación