No. I clienti devono "sondaggio", il server repeatadly.
Penso che la chiave qui sia pensare all'interaction design. Il trucco è ingannare l'utente nel pensare che la chat sia istantanea, ma quando in realtà si aggiorna una volta ogni 1 o 2 o 3 o 10 secondi.
Idee:
1) Quando l'utente invia un messaggio, mostrano direttamente nella chat e innescare un sondaggio.
2) Se un sondaggio torna con più messaggi da altri utenti, non aggiungerli tutti in una volta, in realtà aggiungili per un periodo di 1-2 secondi circa, con spaziatura casuale, facendolo apparire come stanno arrivando "istantaneamente" e indipendentemente.(Se un gruppo di messaggi viene visualizzato in una sola volta, l'utente è molto rapido a rendersi conto che la chat viene aggiornata lì e poi, e non continuamente.)
3) Se l'utente è inattivo per x quantità di tempo. Lascia cadere il polling su una volta ogni 10 secondi circa.
4) Se l'utente è attivo, ovvero invia molti messaggi, esegue il polling più spesso.
5) Avere un file statico per ogni canale in cui si scrive l'ora in cui è stata aggiornata la chat. Ad esempio il file chat-teenfun-lastupdate.txt
ha il contenuto 1224934239
o qualsiasi formato di tempo che preferisci. Serve questo file in modo statico e lascia che i client eseguano il polling di questo file per verificare se il canale è stato aggiornato, piuttosto che chiamare chat-poll.php?ch=teenfun
che esegue un controllo dinamico. I file statici vengono serviti circa 10-100 volte più velocemente, a seconda del lavoro richiesto per lo script dinamico, e ne avrai bisogno quando riceverai più di 250 utenti che eseguono il polling.
Buona fortuna e buon divertimento!
/0
PS. In alternativa, è possibile consentire ai client di effettuare una chiamata ajax al server e mantenerli "sospesi". In questo modo accetti la loro richiesta e fai finta di ricominciare a inviare i dati, ma poi fai una pausa. Quando qualcosa ti succede, finisci la risposta con i dati approriati. Affinché funzioni, credo che avresti bisogno di scrivere il tuo server HTTP, questo lo fa in modo specifico, dato che non puoi avere 250 processi PHP in giro in memoria. Forse Lighttpd potrebbe essere usato in questo modo in qualche modo con quella mod di cache LUA. Non lo so. Sarebbe interessante però. Devo provarlo qualche volta :)
Sapete che qui ci sono alcuni esempi di vita reale di tali cose in PHP/JS? Ne scrivo anche uno per il mio lavoro, sì, ha le sue limitazioni ma non è impossibile. Anche senza tecnologia push. – elcuco
tempo reale per me in tempo reale (eccetto la velocità di connessione) ... ma hai ragione: ci sono un sacco di cose fuori che sembrano davvero in tempo reale ... – TheHippo
Credo che quest'ultimo sia l'approccio che usa Facebook Messenger.Non è necessariamente elegante come un approccio client-server convenzionale, forse, ma fa il lavoro. – Rob