Everytime that the server has a new value for a stock, the app is passed the new data. Finally, the data is displayed to the user.
Questo lascia molto fuori dalla storia. Questo è più un caso d'uso che un design.
Ci sono diversi modi per affrontare questo problema. Sono i tuoi limiti fondamentali che guidano davvero il design. Farò delle supposizioni su quali sono i tuoi limiti.
Presumibilmente non si possiede il server che è la fonte dei dati di magazzino. Hai semplicemente un'API di riposo a cui puoi connetterti. Probabilmente sei limitato a quanto puoi scaricare e quanto spesso riesci a connetterti.
Schedule an Api call every X seconds
Questo è chiamato polling. Ha gravi limitazioni sugli eventi ma può funzionare bene se fatto bene.
1) I'll be downloading much more data than is necessary, since I don't know what stocks have changed their value, I will have to fetch all of them.
Questo dipende interamente dalle limitazioni dell'API. Se l'API in realtà non ti consente di informarti su un determinato titolo ma insiste sull'invio dell'intero ticker, allora sì, questo è vero.
2) This is not really "reactive programming". I somehow feel that the server should "push" the data to the client and not the other way around.
Il polling, fatto bene, è in realtà ciò che realmente sono gli eventi. Sarebbe un design terribile se ogni x secondi ogni utente colpisse l'API e cercasse attraverso l'elenco dei ticker per lo stock di cui si interessava e controllava se il prezzo si fosse spostato. Si tratta di un sacco di lavoro e inutili spostamenti di dati.
Se l'API non ti permette di fare qualcosa di più avanzato, tira giù l'intero ticker quando lo chiami Ti raccomando di creare un server tutto tuo. Il tuo server colpirà l'API del loro server, ottieni l'intero ticker, fallo ogni x secondi, ma sarà l'unica cosa che farà questo.
Il tuo server consentirà agli utenti di registrarsi come osservatori di azioni e ogni volta che un titolo cambierà il tuo server farà il giro degli osservatori registrati e invierà loro una notifica.
Avrai bisogno di alcuni timeout e limitazioni ragionevoli per registrarti come osservatore o sarai oggetto di attacchi denial of service.
Fatto in questo modo le notifiche possono essere limitate sia agli stock di interesse, ai movimenti di prezzo di interesse, sia ai timeout, agli osservatori ancora interessati.
Ciò ti consentirebbe anche di inviare notifiche in qualsiasi forma tu voglia, UDP, TCP, SMS, email, telefonate, cartoline.