Soluzione scalabile per il polling del sito web

1

Sto cercando di aggiungere notifiche push a una delle mie app iOS. L'app è un client per un sito web che non offre notifiche push.

Quello che ho scoperto finora:

  • L'app invia un messaggio al server di casa durante il passaggio allo sfondo, chiedendo al server di avviare il polling del sito Web per l'utente che ha effettuato l'accesso.
  • Il server principale avvia una nuova procedura per eseguire il polling per quell'utente. Il sondaggio avviene ogni tanti secondi / minuti.
  • Quando l'utente torna all'app iOS, l'app invia un messaggio al server principale per interrompere il polling.
  • Il server principale uccide il polling del processo per l'utente.
  • Ripeti.

Il problema è che questo diventa presto stupido: 100 utenti utilizzano centinaia di processi diversi. Non è scalabile nel modo più leggero.

Quello che ho scritto finora è in PHP, usando CURL per fare il polling e ho iniziato con PHP qualche giorno fa, quindi forse mi manca qualcosa di ovvio che potrebbe aiutarmi con questo.

Alcuni consigli sarebbero grandiosi.

    
posta Tom Irving 25.11.2011 - 15:07
fonte

3 risposte

0

Non penso che PHP sia il modo per andare qui, quale sia la tua scrittura come codice back-end. Ho scritto qualcosa di molto simile a questo. Ho usato ruby, eventmachine, em-http-request e beanstalkd. Ha funzionato bene ed è stato semplicemente semplice.

    
risposta data 05.01.2012 - 21:28
fonte
1

Potresti controllare Cometa o BOSH

Quali sono due metodi per simulare i socket su HTTP, sono molto più efficienti del polling e tecnicamente potrebbero scalare fino a 10k se si utilizza un server leggero come Nginx che è molto più adatto a gestire connessioni concurenti rispetto ad apache.

Per quanto riguarda il server con più di 100 connessioni potresti ottenere un'istanza di micro server EC2 Amazon per qualcosa come 19 $ / mese che ti consente di eseguire nginx e potrebbe scalare molto meglio di apache.

    
risposta data 05.01.2012 - 21:02
fonte
0

Sembra che tu stia utilizzando un algoritmo di polling breve. È possibile utilizzare un algoritmo a polling lungo per inviare solo informazioni quando le informazioni che vengono sottoposte a polling vengono aggiornate. Vedere quanto segue: link

Inoltre, perché stai aprendo un processo separato per ciascun utente? Dovresti essere in grado di inviare risposte appropriate a ciascun utente senza aprire processi Apache aggiuntivi.

    
risposta data 25.11.2011 - 20:28
fonte

Leggi altre domande sui tag