• User

    Realizzazione di una chat in PHP

    Ciao a tutti,
    ho finito di studiare il mio mattone di PHP5 e MySQL, e grazie ad una discreta conoscenza della tecnologia AJAX, vorrei provare a realizzare un semplice sistema di chat tra due persone.
    Nella mia testa c'è un'idea, ma forse è fin troppo contorta e di difficile attuazione: ragionando sul "progetto", sono andato incontro a delle criticità inaspettate che mi hanno causato seri dubbi.
    Il primo di questi è: conviene utilizzare AJAX per le richieste asincrone di invio-messaggio/ricezione-messaggio? O forse conviene più utilizzare un frame?

    So che non è una domanda semplice a cui rispondere, ma a grandi linee, voi come la progettereste una chat?
    Scusate se la domanda dovesse sembrare banale, ma una volta che la confusione regna sovrana in testa diventa difficile poi fare le giuste scelte.

    Saluti,
    Akeeron


  • ModSenior

    Ciao,
    senza alcun ombra di dubbio ajax, i frame sono completamente da dimenticare.
    Per quanto la riguarda la progettazione, bisogna un attimo analizzare di quanti utenti devi reggere. In ogni caso bisogna pensare di fare in modo che non si usi il disco, per evitare continue operazioni di lettura/scrittura, che con carichi elevati di utenti sono micidiali.


  • User

    Uhm, essendo il mio un progetto a scopo didattico, non vorrei farmi sconti e quindi senza semplificazioni: facciamo finta che debba emulare la chat di facebook! 😄
    L'idea è questa, in brevi punti:

    • Nel DB creo tre tabelle, una riservata agli 'user' ( PK id_utente ), una per le 'chat' ( PK chat_id ) e l'ultima 'entry' ( PK mess_id e FK chat_id ) dove registrare i vari messaggi di ogni conversazione.
    • Utente A scrive ad Utente B ( Primo problema: Come notificare all'utente B che si è creata una conversazione? Dovrei fare continue richieste asincrone che verifichino nuove conversazioni? E non saturerebbe il server tutto ciò? ), e quindi si crea una nuova voce nella tabella 'chat' ed una nuova voce nella tabella 'entry'.
    • L'utente B riceve il messaggio e memorizza l'id messaggio in una variabile di sessione. Questa fungerà da flag per verificare se sono stati registrati nuovi messaggi nella tabella 'entry' e poi li aggiungerei al div dedicato alla chat grazie ad una sapiente accoppiata di una richiesta $.ajax ed .append in JQuery.

    E così via.
    Così è come ho immaginato che debba funzionare il sistema a grandi linee, poi aggiungerò anche notifiche audio etc...
    Ma il ragionamento fila secondo te? Chiedo conferma perché vorrei imparare a sfruttare le risorse nel miglior modo possibile, e non vorrei fare troppi errori a causa della mia poca confidenza nel mondo della programmazione!
    E se ci fosse un metodo migliore, mi piacerebbe conoscerlo!


  • ModSenior

    Tutto dipende come dicevo da che volumi si hanno su queste chat, un volume come quello di facebook utilizzando php non mi sembra il massimo, proprio perchè devi fare continuamente richieste asincrone, mentre in altri linguaggi ci sono delle vie alternative a questo. PHP non è il massimo per questo genere di cose.

    Una chat php-ajax sul mio browser game ce l'ho, qualche test di carico mi sembra di farlo fatto, (anche se è passato parecchio tempo, utilizzando una tabella di tipo MEMORY e segnando direttamente i nick in quella tabella per evitare di fare altri query), se non ricordo male su un server dedicato sui 5.000 utenti con richieste asincrone ogni 7 secondi riuscivo a gestirle senza intoppi.

    Una cosa importante che puoi fare usando jquery, e mettere le richieste in pausa quando la scheda è inattiva, cosi eviti anche che uno stesso utente apra 10 schede e faccia richieste con tutte e 10 le schede contemporaneamente.


  • User

    Una cosa importante che puoi fare usando JQuery e mettere le richieste in pausa quando la scheda è inattiva, cosi eviti anche che uno stesso utente apra 10 schede e faccia richieste con tutte e 10 le schede contemporaneamente.
    Grazie per il prezioso consiglio. Non sapevo si potesse controllare lo stato di una scheda del browser con JQuery!

    mentre in altri linguaggi ci sono delle vie alternative a questo. PHP non è il massimo per questo genere di cose.
    Scusa la mia curiosità, ma di quali linguaggi parli? Non sono molto "aggiornato"...


  • ModSenior

    Un qualsiasi linguaggio che supporti i socket ti permette un approccio migliore rispetto a php da quel punto di vista, uno molto "di moda" ultimamente è node.js, dove mi sembra ci sia un esempio con la chat.

    Poi a seconda che tipo di chat è, cioè stile messaggi privati come facebook, o a stanze l'approccio può anche essere differente. Perchè una chat a stanze con 100 persone, è logico che arrivino messaggi continui e quindi avere il server che ti notifichi il nuovo messaggio non produce vantaggi di alcun tipo, mentre in una chat tra 2 singole persone la cosa cambia totalmente.


  • User

    Ok, mi informeró su questo node js! A questo punto spero di trovare un bel manuale! Ti ringrazio tanto!