Domanda

Sto lavorando a un semplice servizio di notifica che verrà utilizzato per recapitare i messaggi agli utenti che navigano in un sito Web. Le notifiche non devono essere inviate in tempo reale, ma potrebbe essere un'esperienza utente migliore se si verificano più frequentemente di quanto ogni 5 minuti. I dati inviati da e verso il client non sono molto grandi ed è una query di database diretta per recuperare i dati.

Nel leggere altre conversazioni sull'argomento sembrerebbe che un push AJAX possa comportare maggiori carichi sul server. Dal momento che posso tollerare ritardi del server più lunghi, vale la pena avere le notifiche push del server o semplicemente effettuare il polling.

Non è molto più difficile implementare lo scenario push e quindi ho pensato di vedere quale fosse l'opinione qui.

Grazie per il tuo aiuto.

EDIT: Ho esaminato una semplice AJAX Push e implementato una semplice demo basata su questo articolo di Mike Purvis. Il carico del client è abbastanza basso a circa 5k per la versione iniziale e si prevede che rimanga tale per un bel po 'di tempo.


Grazie a tutti per le vostre risposte. Ho deciso di utilizzare la soluzione di polling ma di racchiuderlo in una libreria di utilità in modo che se lo desiderano modificare in un secondo momento è più semplice.

È stato utile?

Soluzione

Poiché l'utilizzo di un push richiede che venga mantenuta una connessione HTTP aperta tra il tuo server e ciascun client, vorrei andare anche al sondaggio - non solo consumerà molte risorse del server, ma sarà anche significativamente più difficile da implementare come menzionato in matt b. ??

La mia esperienza con il polling è che se si dispone di un intervallo di polling abbastanza frequente su un sito abbastanza occupato, i registri del server Web possono essere inondati di richieste di sondaggio molto rapidamente.

Modifica (2017) : direi che le tue scelte sono ora tra i websocket e il polling lungo (menzionato in un'altra risposta). Sembra che il polling lungo potrebbe essere la scelta giusta in base al modo in cui la domanda menziona che le notifiche non devono essere ricevute in tempo reale, un periodo di polling raro sarebbe abbastanza facile da implementare e non dovrebbe essere molto faticoso sul tuo server . I websocket sono fantastici e un'ottima scelta per molte applicazioni al giorno d'oggi, anche se in questo caso potrebbe sembrare eccessivo.

Altri suggerimenti

Sono sorpreso che nessuno qui abbia parlato di sondaggi a lungo termine. Polling lungo significa mantenere una connessione aperta per un periodo più lungo (diciamo 30-60 secondi), e una volta chiusa, riaprirla di nuovo e semplicemente avere il socket / connessione in attesa di risposte. Ciò comporta meno connessioni (ma più lunghe) e significa che le risposte sono quasi immediate (alcuni potrebbero dover attendere una nuova connessione di polling). Vorrei aggiungere che in combinazione con tecnologie come NodeJS, questo si traduce in una soluzione molto efficiente e leggera, che è compatibile al 100% con tutti i principali browser e versioni e non richiede alcuna tecnologia aggiuntiva come Comet o Flash.

Mi rendo conto che questa è una vecchia domanda, ma ho pensato che potesse essere ancora utile fornire queste informazioni :)

Sicuramente usa spingere è molto più fresco. Se desideri solo semplici notifiche, utilizzerei qualcosa come StreamHub Push Server per fare il lavoro pesante per te. Lo sviluppo della tua funzionalità Ajax Push è una strada estremamente complicata e rocciosa: devi farlo funzionare in tutti i browser e quindi gestire firewall e proxy uccidendo connessioni keep-alive ecc ... Perché reinventare la ruota. Inoltre, ha un'ingombro altrettanto basso di meno di 10 K, quindi dovrebbe adattarsi se questa è una priorità per te.

Entrambi hanno requisiti diversi e affrontano scenari diversi.

Se hai bisogno di aggiornamenti in tempo reale , come in una chat online, il push è un must.

Ma, se il periodo di aggiornamento è grande , come nel tuo caso (5 minuti), il pool è la soluzione appropriata. Push, in questo caso, richiederà molte risorse sia dal client che dal server.

Suggerimento! prova a rendere la pagina che controlla il pool in modo rapido e pulito, in modo da non consumare molte risorse nel server in ogni richiesta. Quello che faccio di solito è mantenere un flag in memoria (come in una variabile di sessione) che dice se il pool è vuoto o no ... quindi, ho solo un'occhiata nel pool solo se non è vuoto. Quando il pool è vuoto, il più delle volte, la richiesta della pagina viene eseguita molto velocemente.

Realizzerei un sondaggio solo perché sembra più semplice da scrivere, e mantenerlo semplice è molto prezioso.

Non sono sicuro di aver dato un'occhiata ad alcune delle implementazioni COMET disponibili (è quello che intendi per push di AJAX).

Se l'utente sta navigando nel sito, in realtà non richiederà informazioni al server su cui questa notifica può essere salvata?

È impossibile dire se il polling sarà più costoso quindi spingere senza sapere quanti client avrai. Consiglierei il polling perché:

  • Sembra che tu voglia aggiornare i dati circa una volta al minuto. A meno che le notifiche non siano in grado di arrivare a una velocità molto maggiore di quella, il push significherebbe che stai mantenendo aperta una connessione HTTP ma stai vedendo pochissima attività su di essa.
  • Il polling si basa sulle convenzioni HTTP esistenti, quindi qualsiasi server che comunica con i browser Web è già pronto a rispondere alle normali richieste Ajax. Una cometa & # 8211; o la soluzione basata su socket Flash & # 8211; presenta requisiti diversi; avrai bisogno di qualcosa come cometd sul lato server e una libreria sul lato client che esegua il push sul lato server.

Quindi, se avessi bisogno di qualcosa di pesante per gestire un torrente di dati e un sacco di clienti, consiglierei Comet. Ma questo non sembra essere il caso.

Esiste ora un servizio http://pusherapp.com che sta cercando di risolvere questo problema una volta per tutte, in un battito di ciglia. Potrebbe valere la pena di provarlo. (dichiarazione di non responsabilità: non sono in alcun modo associata ad essi).

Non l'ho provato io stesso, ma alcuni dicono che COMET funziona ed è più facile di quanto pensi . C'è anche un plug-in Ruby on Rails chiamato Juggernaut di cui ho sentito parlare molto. Ancora una volta, non l'ho usato, quindi YMMV, ma la mia comprensione è che ci vogliono molte meno risorse rispetto al polling. Credo (qualcuno può confermare?) Che COMET è il modo in cui MacRumorsLive.com offre blog dal vivo su WWDC Stevenotes.

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