Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25

Discussione: Chat in Ajax

  1. #1

    Chat in Ajax

    Buonasera,
    ho appena terminato dj creare una piccola chat con la speranza di far crescere al suo internk una community come tante altre attualmente online.

    Ossessionato da sempre da dubbi suli problemi sul numero di utenti contemporanei, ho deciso di sperimentare un funzionamento diverso.

    La logica mi diceva di utilizzare un db mysql per memorizzare le cknversazioni ma, dal momento che non volevo ricorrere al suo utilizzo, ho deciso di peovare a scrivere in file di testo sia la con ersazione che le informazioni suglio utenti connessi.

    Il risultato è che con 4 (quattro) utenti contemporanei, la chat va lentissima!!!

    In Ajax riaggiorno la chat ogni mezzo secondo e riscrivo l'intero contenuto del file txt nel div di visualizzazione. Quando invio un nuovo messaggio invece non faccio altro che accodare al file il testo appena scritto.

    Dove sto sbagliando?

    Grazie mille in anticipo

  2. #2
    Diciamo che questo non è un ottimo meccanismo per la realizzazione di una chat. Considera che maggiore è il numero di byte trasmessi, maggiore è la lentezza del tuo script, quindi a che server riscrivere completamente il contenuto del div se l'utente ha gia quella roba stampata a video? Puoi provare 2 cose:

    1) Indicizza il tuo file txt con dei timestamp (in microsecondi possibilmente), e fai in modo che ogni client invii al server l'ultimo timestamp ricevuto (in questo modo puoi escludere tutte le vecchie righe, ed inviare al cliente solamente quelle nuove). Successivamente appendi le nuove righe di chat all'interno del div.

    2) Cambia sistema ...guarda un po qui http://nodejs.org/ . Lo utilizzo attualmente in modulo sviluppato per Drupal e funziona benissimo. Un po complicato da configurare pero...
    Puoi cosi implementare un server in javascript che resta in ascolto su una porta. In questo modo il browser non funge piu solo da client (cioe chiedere al webserver di inviargli le ultime righe di chat), ma puoi configurarlo di modo che non appena siano disponibili nuovi dati, essi vengano inviati a tutti i 'server' connessi. Una sorta si sistema a notifiche push.

    Se poi vuoi restare fedele ad Ajax ti consiglio di implementare un sistema basto sul Long Polling -> vedi qui http://techoctave.com/c7/posts/60-si...ipt-and-jquery

    V.I.S.T.A. --> Virus Inside, Switch To Apple

  3. #3
    Azz, quindi secondo te è un problema client, non server?

    Interessante... Effettivamente il file della conversazione dopo un po' inizia ad essere pesantuccio se non svuotato ma non pensavo che ajax avrebbe avuto problemi ad outputarlo.

    Ho sempre cercato di salvaguardare il server facendo fare più operazioni possibili al client ma forse ho esagerato! :-)

    Provo a mettere un controllo lato php che restituisce solo i nuovi messaggi in maniera ma alleggerire il risultato della funzione ajax come consigliatomi da tr!

    Grazie mille, ti tengo aggiornato!

    Ps
    Scusate tutti se ci sono errori di battitura ma sono da iphone!

  4. #4
    Allora, ho modificato la chat facendo un controllo lato server (sulle chiamate ajax per aggiornare il contenuto della chat) in maniera da stampare solamente i nuovi messaggi (grazie al microtime).

    La chat però non è migliorata molto. Le chiamate ajax continuano ad essere lente (con una decina di utenti simultanei...), a volte lentissime.

    Non riesco capire se il problema a questo punto sia il server o il client...

  5. #5
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    I consiglio che ti posso dare e' di evitare come la poeste questa soluzione.

    E' un acrocchio che si faceva fino a qualche tempo fa poiche' ajax si ccollegava a server stateless come apache con i mod php etc.....

    Soluzione per l'anno 2012 :

    1- usare i socket in js ( si i socket in html5 javascript ha i sockets!!!)
    2- usare un canale irc come server di chat
    3- eseguire la connessione dalle pagine al canale irc usando i socket javascript


    A tal proposito html fornisce una buona guida di base : http://javascript.html.it/articoli/l...ml5-websocket/

  6. #6
    Ti ringrazio dei consigli, però volevo provare a svilupparla interamente da 0, senza utilizzare pezzi esterni come irc.

    Vorrei provare a fare tutto hand made.

    Ajax quindi è sconsigliato per le chat? Troppo lento?

  7. #7
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    fermo puoi fare in ajax ma devi avere un db e capire come gestire concorrenzialità , il file non va bene ad esempio.

    Con ajax fai una request ongi x tempo e se ci sono messaggi li scarichi. solitamente si scaricano sempre gli ultimi 10-20 messaggi in formato json e poi in js li stampi.

    Quindi si puoi farla in aajax ma oggi come oggi nel 2012 io preferisco l'approccio js socket + canale irc o altro canale o server fatto da me ()

    1 non pesi inutilmente con request ridondanti
    2 se hai molti utenti hai anche un canale separato e con i relativi bot nel chan irc puoi controllare molte cose
    3 non pesi sull'sql del server ...
    4 non hai una connessione stateless ma una connessione vera e propria e con gli opportuni listeners puoi gestire il tutto senza sbroccare con request che si sommano etc....

    E poi e' una cosa interessante da sviluppare con le nuove tecnologie

    P.S. su mobile e' una figata ++ da fare

  8. #8
    Cioè, tra fogli di testo e DB MySQL è meglio il DB?

    Perchè appunto la mia preoccupazione è che con tanti utenti contemporanei mi scoppi mysql per le troppe connessioni (andrebbe a fare come minimo una query ogni mezzo secondo per ogni utente presente in chat).

    Mentre così, con i file d testo, io vedo solo a leggere il contenuto del file o, in caso di scrittura, ci appendo in fondo ciò che ho appena scritto.

  9. #9
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    E' meglio il db ..

    pensa a questo caso :


    2 utenti (per semplcitià)

    1- accede e apre il file in mem
    2- accede e apre il file in mem

    1- scrive commento nel file aperto in mem e salva
    2 -scrive commento nel file aperto in mem e salva

    1- rileggi il file e estrapola messaggi
    2- rileggi il file e estrapola messaggi

    => RIsultato messaggio di utente 1 e' sparito perche' sovrascritto da utente 2 !!!

    DB e' meglio gestisce gia' quesi casi e accoda opportunamente tutto.
    Poi dipende da quanti utenti hai etcc ma devi pulire la tabella ogni x tempo....

    Io ti consiglio socket + chan irc ! Tieni il server leggero .. e poi hai una gestione piu' carina in addizione che fai delle cose con nuove tecnologie in html5 e' e' bene

  10. #10
    ma che sei il proprietario di questo chan irc??? :-)

    A parte gli scherzi, problemi di sovrascrittura di file non li ho mai avuti per fortuna quindi per ora non me li pongo come problema. Il mio problema resta la velocità di risposta del server sulle chiamate ajax.

    A volte ci mette circa 10 secondi per stamparmi quello che ho appena scritto.
    E non so se utilizzando il database la cosa migliori.

    Tu che dici?

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.