messaggistica in stile Comet: Come implementare una parte server senza polling?
-
29-09-2019 - |
Domanda
Sto progettando una chat-come applicazione web, dove ogni volta che uno i messaggi degli utenti qualcosa, tutti gli altri utenti (che è, le persone con il loro browser che punta a quel sito) otterrebbe aggiornamenti in tempo reale. La scelta comune per questo è la messaggistica cometa in stile utilizzando richieste AJAX-polling lungo. Scrivendo la parte client-side con jQuery non è un gran problema.
Ma mi chiedo come meglio implementare la parte lato server in PHP. I messaggi / messaggi verranno archiviati in MySQL e la questione è: Dopo aver scritto un nuovo post al database, come faccio a notificare tutte le richieste di attesa, che i dati sono disponibili per loro senza usando polling? Polling avrebbe funzionato, ma è brutto e lo spreco di risorse, in tal modo, questo è quello che non voglio:
while (timeout not reached) {
if ($database->has_changes())
break;
sleep(1);
}
handle_changes_if_any();
C'è una sorta di funzione di MySQL che mi avrebbe aiutato qui? Sarebbe una sorta di IPC aiuto? Il server esegue Apache.
Soluzione
È già menzionato una possibile soluzione, che è quello di utilizzare AJAX polling per interrogare uno script periodicamente gli aggiornamenti. Polling sarebbe fatto sul lato client, e non ha nulla a che fare con il lato server.
Un'altra opzione sarebbe quella di utilizzare un server cometa come Meteor . Con questo approccio, lo script PHP può notificare al server cometa dei nuovi messaggi ed i clienti collegati riceveranno gli aggiornamenti. Poi è solo a voi di scrivere il codice JavaScript per visualizzare l'aggiornamento per l'utente.