Push vs Poll quando è accettabile un grande ritardo (ore)


10

Al giorno d'oggi sembra assurdo che il polling sia una cattiva pratica e che spingere è la strada da percorrere quando si sviluppano applicazioni mobili che richiedono di ricevere costantemente dati da un server remoto.

Tutti i principali negozi di telefonia mobile forniscono la loro versione di un servizio di notifica push:

Tuttavia mi chiedo fino a che punto questa ipotesi sia valida. Voglio dire, se ho un'applicazione che esegue il polling di un server remoto solo un paio di volte al giorno e alla quale "notifiche" non devono essere consegnate all'istante (un ritardo considerevole è accettabile), sarebbe una buona decisione fare il polling per i dati invece di spingerli?

Grazie in anticipo!


1
Non ho abbastanza familiarità con i meccanismi di spinta mobili per pesare davvero su questo, ma mi chiedo se l'uso del meccanismo di spinta potrebbe salvare alcuni mal di testa, ad esempio per quanto riguarda gli scenari di spegnimento / sospensione. Se questa fosse solo un'applicazione desktop / web, direi che il polling va bene; spingere in genere implica anche mantenere una connessione aperta sul tuo server web, quindi questo è un altro vantaggio del polling in un desktop / browser, ma poiché si tratta di un'applicazione mobile e puoi usare questi meccanismi push alternativi, penso che la risposta potrebbe essere diversa.
Apprendista Dr. Wily,

Risposte:


14

Il polling è sempre accettabile quando il tempo reale non è una necessità. Quello che devi chiederti è perché dovresti usarne uno anziché l'altro?

Lo scopo di un servizio push è un paio di cose; può essere considerevolmente meno traffico per te gestire se i tuoi push sono trasmissioni e un provider di terze parti fa la trasmissione - questo ti consente di inviare un messaggio e ricevere migliaia di esso. Ma come notate, il più grande vantaggio di un servizio push è la natura in tempo reale che consente aggiornamenti immediati per raggiungere i vostri consumatori. Tuttavia, quando si eseguono push, non si vuole mai spingere set di dati di grandi dimensioni se si sta trasmettendo, e si è anche in balia del servizio push di terze parti che si utilizza (se ne si utilizza uno).

Lo scopo di un sondaggio è di verificare periodicamente le differenze di dati, in cui il periodo di aggiornamento può avere uno SLA accettabile di inesattezze fino a un determinato periodo di tempo. Un sondaggio richiederà a tutti i tuoi clienti di richiedere periodicamente i dati, il che significa che viene richiesta una connessione per ogni client in esecuzione e la necessità di un servizio live in grado di monitorare accuratamente quei dati per servirli fino ai poller. Avere dati precisi da servire significa una certa persistenza dei dati che richiederà tempo di manutenzione e del disco.

Quindi da questo possiamo vedere che se hai dubbi sul traffico di rete o sulla manutenzione di un servizio (il che significa eventualmente autenticare / autorizzare richieste, registrandole che occupano spazio su disco, tutti i normali requisiti di manutenzione di un servizio) allora non voglio forzare i clienti a effettuare il polling. Tuttavia, se il caso d'uso richiede la trasmissione di un set di dati particolarmente grande o non è possibile essere vincolati all'API di una terza parte che può cambiare nel tempo, nonché il loro SLA o i relativi addebiti, è possibile che si applichi un sistema di polling domestico, sebbene la manutenzione le spese generali possono essere significativamente più. In alternativa, è possibile che il servizio sia già in esecuzione e che i dati persistano in modo tale che il polling sia una leggera aggiunta all'infrastruttura già in atto, il che rende il polling più desiderabile.

Sebbene al punto centrale che ti fai sia corretto; se è necessario il tempo reale , il polling non lo farà. In caso contrario, devi solo fare i conti su come periodicamente i dati possono essere controllati moltiplicati per la tua base di clienti moltiplicata per la dimensione del tuo set di dati per decidere se il costo della rete varrà la pena o se un servizio push sarebbe meglio dove puoi sempre semplicemente inviare un evento di modifica che consente loro di richiedere il set di dati di grandi dimensioni in un passaggio secondario (anche se l'atomicità di questi passaggi può essere qualcosa di cui devi fare attenzione a seconda della criticità dei dati).


3

Il polling dovrebbe andare bene nel tuo caso. E non dovrai integrarti con l'ennesimo sistema (o più sistemi per più piattaforme).

Tuttavia, le specifiche del dispositivo potrebbero essere un problema. Puoi eseguire il polling affidabile quando l'app non è in primo piano e al centro del dispositivo? (può o meno essere un problema per te). La tua capacità di farlo può dipendere dalla tecnologia che stai usando per sviluppare l'app.


Sto programmando di utilizzare i timer integrati per assicurarmi che l'app esegua il polling del server anche se non è "attivo". So come farlo su Android e spero che iPhone e Windows Phone offrano la stessa funzionalità;)
Thomas CG de Vilhena,

2

Ovviamente. È anche più facile (basta fare attenzione ai picchi di pull se tutti stanno eseguendo lo stesso programma).

Detto questo, sfiderei il presupposto che "un grande ritardo è accettabile", considerando le aspettative degli utenti mobili. ("Le mappe non vengono aggiornate in tempo reale! Inaccettabile!" - oppure - "So che è il servizio meteo, ma continuerò a premere quel pulsante di aggiornamento ogni cinque secondi fino a quando le previsioni per domani non saranno assolate!")


Un buon punto per impedire a tutti di effettuare il polling allo stesso tempo. Immagino che impostare i timer in modo casuale farà il trucco!
Thomas CG de Vilhena,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.