Come si crea un server di chat che non è guidato da sondaggi?
-
19-09-2019 - |
Domanda
Ho creato un semplice server di chat che è guidato da polling cliente. I client inviano richieste di dati ogni pochi secondi, e vengono consegnati tutti i nuovi messaggi e le informazioni sul fatto che la loro pari è ancora collegata.
Dato che il client è in esecuzione su una piattaforma mobile (iPhone), ho cercato di modi di sbarazzarsi del polling, che drena rapidamente la batteria. Ho letto che è possibile mantenere una connessione http aperta a tempo indeterminato, ma non ho capito come utilizzare questa tecnica nella pratica. Sto anche chiedendo se tali collegamenti sono abbastanza stabile da utilizzare in un ambiente mobile.
Lo scenario ideale sarebbe che il server invia solo i dati per i clienti quando si è verificato un evento che li riguarda (come ad esempio un peer per inviare un messaggio o di andare fuori linea).
E 'consigliabile cercare di ottenere questo risultato su HTTP, o dovrebbe devo scrivere il mio protocollo su TCP? Che ci vuole essere per personalizzare XMPP per il mio bisogno (il mio server di chat ha alcune caratteristiche speciali che avrei dovuto implementare facilmente).
Soluzione
Come su tecnologia push? vedi http://en.wikipedia.org/wiki/Comet_(programming)
Altri suggerimenti
Credo che stai descrivendo XMPP su BOSHI.
http://xmpp.org/extensions/xep-0206.html
Ho usato questo metodo di rilegatura http-tra un server di chat e JavaScript client sui dispositivi non mobili. Ha funzionato bene per me.
Come si potrebbe verificare questo progetto che utilizza una varietà di tecniche tra cometa. Rilasciare dettagli sono qui , ecco un frammento da quella pagina
E 'il mio piacere distinto per essere in grado di annunciare la prima proiezione pubblica di un progetto che ho lavorato su nel mio tempo libero nell'ultimo mese o due, una nuova Web Based di chat IRC applicazione.
Questo progetto riunisce un sacco di nuove tecnologie che dovevano essere sviluppata per rendere questo fattibile, scalabile ed efficiente.
Alcuni degli strumenti sottostanti costruire a rendere questo posible che considero ‘Abbastanza stabile’ sono già rilasciato, come ad esempio il php Socket Daemon biblioteca ho scritto per essere in grado di affrontare centinaia fino a migliaia di connessioni “Comet” http, e un pari quantità di connessioni client IRC.
Ho appena trovato questo articolo me stesso, che descrive la seguente tecnica (che ho fatto riferimento nella domanda):
... hanno il cliente fa una richiesta HTTP e che il server tenere la richiesta sulla coda fino a quando c'è un messaggio spingere. se la connessione TCP / IP è perso o volte-out, il client fare una nuova richiesta HTTP, e il ritardo sarà solo il tempo di andata e ritorno per un richiesta pair risposta /. . . questo modello richiede in modo efficace due TCP / IP connessioni per HTTP, il programma e del server, anche se nessuno permanente e quindi mobile friendly
Credo che questo è quasi impossibile e pericoloso. La connessione internet funziona significato senza stato e senza connessione che la connessione tra client e server è sempre gestito come inaffidabili. E questo non è per divertimento.
Per cercare di ottenere una connessione stateful si stanno introducendo nuovi problemi. Soprattutto da un'applicazione 3g. Che cosa succede se le interruzioni di connessione? Non avete controllo del server e non può spingere.
penso che sarebbe ancora più facile per inviare messaggi SMS / di testo e dispone di un'applicazione che gestisce questo.