Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Refresh di una chat

  1. #1

    Refresh di una chat

    Sto impazzendo per una chat.
    In pratica ho tre frames: il frame inferiore invia il testo del messaggio e lo inserisce nel database; il frame centrale, nascosto, si aggiorna ogni 8 secondi recuperando tutti i messaggi con ID maggiore dell'ultimo ID recuperato la volta precedente (memorizzato in una variabile di sessione) e trascrivendoli con document.write nel frame superiore.


    Problema n° 1: Volendo simulare una chat affollattissima, ho fatto una prova da sforzo della chat, facendo si che la pagina di invio messaggi inviasse messaggi in continuazione, a velocità assai maggiore di quella che potrebbe fare anche uno smanettone... e la chat impazzisce, nel senso che mi riscrive più volte le stesse righe, già richiamate
    In pratica è come se spesso non tenesse conto della riassegnazione della variabile dell'ultimo ID trascritto.
    Posso ovviare alla cosa in qualche maniera?

    Problema n° 2: Sostituendo innerhtml al posto di document.write, è come se l'avanzamento della chat scattasse, in particolare mi sembra che ricarichi ogni volta le immagini al lato della riga. Che faccio?

    Posto la parte essenziale del codice, togliendo gli elementi accessori che possono distrarre dal problema vero e proprio:

    Frame centrale:

    Codice PHP:
    <?
    session_start
    ();
    if (isset(
    $_SESSION['username'])) {

    //connessione al database
    include('config.php');


    // legge le righe dalla chat 
    $query "SELECT * FROM chat WHERE ID > '".$_SESSION['lastchat']."'";

    $maxid=mysql_query("SELECT max(ID) FROM chat"); 
    $_SESSION['lastchat']=mysql_result($maxid00); 

    $risultato mysql_query($query);


    while (
    $riga mysql_fetch_assoc($risultato)) {

    $riga['Testo']=htmlentities($riga['Testo']);

    if (
    $riga["Tipo"]==0)    {            

    $format="<FONT FACE='Verdana, Arial' COLOR='#606060' SIZE=1>[size="1"]".date("H:i:s",$riga["Ora"])."[/size]</FONT> [img]".$phpbb_root_path.$riga["ImgUno"]."[/img] [B]<FONT SIZE=2 color='#000000'> <span onclick='javascript:parent.middle.invio.msg.value=&quot;@".$riga["Mittente"]."@&quot;;parent.middle.invio.msg.focus();';>".$riga["Mittente"]."</span> [img]".$phpbb_root_path.$riga["ImgDue"]."[/img]</FONT>[/B]<FONT SIZE=2 color='#000000'>     ".$riga["Testo"]." </FONT>
    "
    ;
       }

    elseif (
    $riga["Tipo"]==1)    {            

    $format="<FONT FACE='Verdana, Arial' SIZE=1 COLOR='#606060'>[size="1"]".date("H:i:s",$riga["Ora"])."[/size]</FONT> [B]<FONT COLOR='#FF6500'>[size="1"]".$riga["Mittente"]." ".$riga["Testo"]."[/size] </FONT> [/B]
    "
    ;

       }


    //accoda la riga da scrivere in chat e chiude il ciclo while
    $immetti=$immetti.$riga['ID']." ".$format."\\n"


    $immetti=$riga['ID']." ".$format

    $immetti="<div>".$immetti."</div>";

    }  

    if (isset(
    $immetti))  {
    echo 
    " <script> parent.sopra.document.write("."\"".$immetti."\"".");";
    echo 
    'parent.sopra.scrollTo(0, parent.sopra.document.height ? parent.sopra.document.height : parent.sopra.document.body.scrollHeight) </script>';

    }  

    /* nel caso dell'innerhtml uso questo al posto del document.write:
    echo " <script> parent.sopra.document.body.innerHTML+="."\"".$immetti."\"".";";
    */

    }


    ?>

  2. #2
    ciao, tempo fa avevo provato a fare una chat basata su php e mysql ajax

    ajax viene usato per fare il refresh della chat senza il reload della pagina

    se guardi la sezione javascript di html.it c'è un tutorial di una chat php-mysql-ajax

    x quel che riguarda il refesh o aggiornamento della pagina, considera che di solito x non sovraccaricare il server viene fatto ogni 5-6 sec

    ciao

  3. #3
    alex ti ringrazio, ora vedo

    qualche idea sul perchè mi dà quei problemi comunque?

  4. #4
    ho modificato la chat, il frame della chat ora usa ajax

    ho capito perchè innerHTML sembrava scattasse: mi pare che succeda perchè tenta di ricaricare le immagini non riuscite a caricare la prima volta; se mi succedeva come penso solo perchè non avevo l'immagine che provava a caricare, non mi interessa più di tanto.

    invece mi interessa capire perchè sforzando come ho spiegato l'inserimento di nuovi messaggi a tamburo battente - la pagina del form di inserimento messaggio ha un onload=document.frameinvio.submit() - mi ripete i messaggi;

    ho provato anche ad arginare la cosa con il LOCK TABLES, in varie combinazioni, ma con scarsissimi risultati (mi è sembrato anzi di peggiorare)

    idee? suggerimenti?
    può essere un limite della velocità di esecuzione cui mi devo arrendere?

  5. #5
    aggiornamento:

    ora la pagina della stanza vera e propria si aggiorna tramite ajax, quindi i valori non vengono da un altro frame...
    per non sovracaricare il database di richieste, ho anche fatto in modo che l'aggiornamento automatico avvenga sempre ogni 8 secondi, anche dopo un aggiornamento manuale


    i risultati però non mi soddisfano, addirittura mi sembra la chat scorresse di più prima;
    mettendola sotto sforzo, inondando cioè il database di inserimenti con un auto-submit del form di invio, ora mi salta completamente alcuni messaggi:
    come se in pratica dello script richiamato in ajax per fare il refresh riuscisse a eseguire solo l'aggiornamento dell'ultimo id di messaggio richiamato ma non riuscisse a fare in tempo a scrivere i messaggi richiamati

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.