Domanda

Sto costruendo un'applicazione web in tempo reale Per quanto ne so, la maggior parte delle scelte popolari sono di breve e lungo polling polling. Quali sono i vantaggi e gli svantaggi potrebbero esserci per misurare uno sopra l'altro?

È stato utile?

Soluzione

  • Breve polling (anche noto come il timer in base AJAX):

    Pro: più semplice, senza server di consumare (se il tempo tra le richieste è lungo)
    . Contro: male se avete bisogno di ricevere una notifica quando l'evento del server avviene senza alcun ritardo. Esempio (< a href = "http://www.itsnat.org" rel = "noreferrer"> ItsNat based)

  • polling lungo (anche noto come Comet sulla base di XHR)

    Pro: l'utente viene informato quando l'evento del server avviene senza alcun ritardo. Contro: più complessa e più risorse del server utilizzati. Esempio (ItsNat based)

Altri suggerimenti

Solo per amor di discussione.

Entrambi sono http richiesta (XHR), e la sua almeno in parte falso utilizza più risorse del server (dipende totalmente sulla tecnologia, spiegherà più tardi).

Breve polling.

Lotto di richiesta che sono trattati come vengono sul server. Crea un sacco di traffico (utilizza le risorse, ma li libera non appena la risposta è mandare indietro):

00:00:00 C-> Is the cake ready? 
00:00:01 S-> No, wait.
00:00:01 C-> Is the cake ready?
00:00:02 S-> No, wait.
00:00:02 C-> Is the cake ready? 
00:00:03 S-> Yeah. Have some lad.
00:00:03 C-> Is the other cake ready? ..

Long polling

Una richiesta va al server e il client è in attesa per la risposta a venire (il suo non risolto). Nel caso di server con PHP / apache significherebbe un filo generato al manico, che le risorse di riserva, fino al suo fare. Così il traffico è più piccolo, ma si mangia le vostre risorse veloce (o meglio, si bloccano le risorse). Ma se si utilizza ad esempio il nodo (o qualsiasi altro approccio asincrono - C ++ Qt per esempio), è potenzialmente in grado di ridurre al minimo l'utilizzo delle risorse di un (oggetto risposta serbo per http richiesta e usarlo quando il lavoro è pronto) molto

12:00 00:00:00 C-> Is the cake ready? 
12:00 00:00:03 S-> Yeah.Hame some lad.
12:00 00:00:03 C-> Is the cake ready? 

Se si confronta che a breve polling, si vedrà che potenzialmente in breve sondaggio è stato utilizzato più di trasferimento, ma durante quei 3 secondi si effettivamente prendere 1,5s di tempo di elaborazione (significa qualcosa potrebbe eseguire tra le chiamate). Nel caso in cui per lungo sondaggio le stesse risorse sono state utilizzate per tutto il tempo. Ora di solito PHP con tutte le libs inizia con la memoria 4MB - allora avete un 4-20MB quadro. Si supponga di avere 1024MB di RAM a disposizione (gratis). Di 'permette di essere pessimista e supporre che si intende utilizzare 25 MB per un'instace php. Significa che si può ottenere solo fino a 40 script di connessione lunga intervistati.

Il suo proprio il motivo per cui si potrebbe servire potenzialmente molto di più con il nodo, come nodo non sarebbe deporre le uova le sue istanze (a meno che non si desidera utilizzare i lavoratori, ecc), quindi con lo stesso memoria che si potrebbe probabilmente ottenere facilmente a 10k connessioni sospese. Si otterrebbe un picco nella CPU come verranno, e quando potranno potenzialmente essere liberati, ma quando sono inattivi sua, come non sono lì (si paga solo per le strutture di memoria che si tenere a nodo / c ++).

websocket

Ora, se si desidera inviare alcune cose, ogni volta che sono dentro o fuori del cliente, andare per le WebSockets (WS protocollo). Prima chiamata è la dimensione di http richiesta, ma in seguito si inviano solo i messaggi, dal client al server (nuove domande) e server al client (risposte o spinte - può anche fare in onda per tutti i client connessi). Ci sono php websocekts librerie ma ancora utilizzare alcune diverse tecnologie -. Nodo o C ++ preferibilmente

Alcune librerie, come socket.io hanno una gerarchia propria, in modo che quando websocket fallisce, si va di nuovo a lungo o corto polling.

Quando usare.

polling breve -. Beh, mai ^^

Long polling - potenzialmente quando si stanno scambiando chiamata singolo con il server, e il server sta facendo un lavoro in background. Anche quando si non sarà query su un server sulla stessa pagina più. Anche quando non si utilizza php come livello per gestire la connessione lungo polling (nodo / c ++ può essere un semplice strato intermedio). Nota polling lungo può essere davvero utile, ma solo quando si rendono così.

websocket - si potenzialmente scambierete più di una o due chiamate con il server, o qualcosa del genere potrebbe venire dal server non è stato previsto / chiese, come la notifica di e-mail o qualcosa del genere. È necessario pianificare diverse "stanze", dipenderà funzionalità. Abbracciare la natura basata caso di javascript;]

Se si desidera ottenere l'applicazione in tempo reale sulla base del database è possibile utilizzare ajax lunga sondaggio e la combinazione cometa. Long sondaggio è veramente buono per la vostra larghezza di banda ed inoltre è molto utile per l'utente MB.Because quando richiesta dell'utente di invio utente pagherà per questo, come MB o un qualche tipo di internet connection.For esempio per sondaggio breve quando si fa qualcosa come l'invio di richiesta per l'utilizzo secondo internet utente sarà più, perché ogni utente di connessione pagherà per questo (ciò significa che l'utente sciolto Mb), ma nel manuale di polling lungo solo pagherà solo per i nuovi messaggi .

  

websocket è davvero buona cosa, ma quando lo si utilizza si dovrebbe pensare a un grande problema che un sacco di gente non può usare sistem videochat perché websocket è solo nuova versione del browser

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