Domanda

Come posso scrivere una chat in tempo reale utilizzando xajax e PHP?

In altre parole, c'è un modo per inviare le risposte xajax dal server al client multipli? O è l'unica possibilità per verificare la presenza di nuovi messaggi ogni pochi secondi sul lato client?

È stato utile?

Soluzione

No. I clienti devono "interrogare" il server repeatadly.

Credo che la chiave qui è quello di pensare il design dell'interazione. Il trucco è quello di ingannare l'utente a pensare che la chat è immediata, 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, mostrare direttamente nella chat e innescare un sondaggio.

2) Se un sondaggio torna con più messaggi da altri utenti, non li fanno aggiungere in una volta, in realtà aggiungerli in un periodo di 1-2 sec o giù di lì, con spaziatura casuale, facendolo apparire come se fossero' re in arrivo "immediatamente" e in modo indipendente. (Se un gruppo di messaggi entrare in una volta che l'utente è molto veloce per rendersi conto che la chat aggiornato lì per lì, e non continiously.)

3) Se l'utente è inattivo per x quantità di tempo. Drop il tasso di sondaggio per volta ogni 10sec o giù di lì.

4) Se l'utente è attivo, vale a dire l'invio di un sacco di messaggi, sondaggio più spesso.

5) Avere un file statico per ogni canale che la scrittura del tempo la chat ultimo aggiornamento a. Ad esempio, il file chat-teenfun-lastupdate.txt ha il 1224934239 contenuti o qualsiasi altro formato di tempo che preferite. Servite questo file staticamente e lasciare che i clienti polling questo file al fine di verificare se il canale ha aggiornato, piuttosto che chiamare chat-poll.php?ch=teenfun che fa un controllo dinamico. file statici sono serviti intorno 10-100 volte più veloce, a seconda del lavoro svolto per lo script dinamici, e si sta andando bisogno quando si arriva oltre 250 utenti di polling.

In bocca al lupo e buon divertimento!

/ 0

PS. In alternativa si potrebbe effettivamente lasciare che i clienti fanno una chiamata AJAX al server e tenerli 'appesi'. Questo è accettare la loro richiesta e far finta di iniziare a inviare i dati indietro, ma poi basta mettere in pausa. Quando qualcosa happends aver terminato la risposta con i dati approriate. Per far funzionare tutto questo credo che avresti bisogno di scrivere il proprio HTTP server, però, che fa questo in particolare, come non si può avere 250 processi php in giro in memoria. Forse Lighttpd potrebbe essere utilizzato in questo modo, in qualche modo, con quella cache LUA mod. Non lo so. Sarebbe interessante però. L'inferno devo provare qualche volta:)

Altri suggerimenti

Certo che c'è, ma non credo che sarà molto efficiente con molti utenti. È possibile fare sondaggi dove ogni sondaggi client il server per vedere se ci sono nuovi messaggi, oppure è possibile utilizzare il comet tecnica in cui il server può spingere i nuovi messaggi ai clienti - Vai alle plugin di Comet per xajax . Come questo sarebbe essere implementato usando xajax e PHP è al di là di me, ma ecco come vorrei provare a realizzarlo.

Lasciate ogni cliente connettersi al server (login, ecc), allora:

  1. Per ogni messaggio inviato da un client (mittente) aggiornare la coda di messaggi per il client (ricevitore)
  2. Let client server sondaggio per i nuovi messaggi nella coda / Spingere i nuovi messaggi tramite cometa.
  3. Aggiornamento GUI se ci sono nuovi messaggi.
  4. Sciacquare, schiuma, ripetere

Utilizzo di un vero server di chat come ejabberd potrebbe andare un lungo cammino, essere più efficiente e consentire agli utenti di connettersi tramite client desktop (se è quello che volete). probabilmente userei che come backend, IOW ejabberd sarebbe il server e PHP sarebbe il client utilizzando XMPP in PHP , e agire come un proxy per la WebGUI.

Vedi anche:
Google Techtalk sulla funzione di chat di Gmail (e problemi di scalabilità)

Questo è il mio $ 0.02

Finché c'è non c'è la tecnologia HTTP spinta si potrà mai ottenere una chat in tempo reale utilizzando solo JavaScript.

Possibili workarrounds:

  • utilizzare un filmato Flash o un applet Java per eseguire alcuni comunicazione socket
  • le richieste di polling attesa back sul lato server per alcuni secondi

Si potrebbe usare WebSockets, ma essendo una nuova funzionalità HTML5 È un po 'limitata. Fortunatamente per voi c'è socksjs , che implementa WebSockets su browser che non gestiscono esso.

Sul lato di hosting si dovrebbe essere in grado di utilizzare qualsiasi server WebSockets, c'è un paio per PHP.

Se stai cercando di implementare un server di chat scritta con un linguaggio di scripting come PHP / JSP, tecnica di appendere connessione HTTP dovrà essere spuntato fuori dalla vostra lista di opzioni. Il motivo è la maggior parte dei recide web (host appositamente condivisi) non piace troppe connessioni appesi.

È possibile trovare tutto il necessario per implementare un client e un server web PHP chiacchiere in questo "Ottimizzato Chat Server protocollo per Server Side linguaggi di scripting" pubblicazione.

La strategia migliore che ho visto è quello di fare una richiesta AJAX per i messaggi e quindi riavviare quella stessa richiesta non appena finisce.

Sul lato server, rendere lo script "stallo" per 60 secondi o fino a quando un nuovo messaggio viene ricevuto. Ciò mantiene la stessa connessione aperta per un massimo di 60 secondi, ma quando si riceve un nuovo messaggio, uscite e arresta immediatamente, spingendo l'AJAX lato client per aprire un'altra connessione.

Questo fornisce la notifica quasi istantanea dei nuovi messaggi ed è anche molto più facile sul server che fare una nuova connessione ogni x secondi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top