Sto implementando un'app che ha tra l'altro condiviso le liste di cose da fare. Voglio che si sincronizzi in tempo reale. Questo deve funzionare per gli elementi "normali" di un singolo utente (ad es. L'utente ha l'app aperta in 2 dispositivi, facendo apparire immediatamente un aggiornamento in un dispositivo nell'altro dispositivo) e gli elenchi condivisi, dove tutti i partecipanti devono ricevere l'aggiornamento in tempo reale.
Non sono del tutto sicuro di quale tipo di struttura sia la migliore per raggiungere questo obiettivo. Stavo pensando di memorizzare un dizionario di utente uuid - > lista di prese. Quando gli utenti accedono o aprono l'app durante l'accesso, avviano una connessione. Qui aggiungo una voce o un aggiornamento al dizionario. Quando si disconnettono o chiudono l'app, la connessione viene chiusa e aggiorno la mappa di conseguenza. Ogni volta che l'app esegue un aggiornamento sul server, cerco gli utenti interessati, quindi cerco nel mio dizionario possibili web socket aperti per questi utenti e li inviamo agli aggiornamenti.
Un'altra idea che avevo, era quella di associare le connessioni piuttosto che con gli utenti, con gli elementi, come ad es. le liste di cose da fare. Quindi di nuovo ho un dizionario, ma questa volta la chiave è la lista delle cose da fare uuid e ha una serie di connessioni ("osservatori") per questa lista, dove trasmetto ovunque l'elenco viene modificato. Questo approccio non è adatto per il "single user sync", tuttavia, qui gli elementi non hanno necessariamente una propria identità, piuttosto associata all'utente - quindi sono tornato al primo approccio con un utente del dizionario - > connessioni.
Ma prima di approfondire altri dettagli vorrei confermare se questo è il modo giusto di pensare. Come viene normalmente modellato? Questa è piuttosto una domanda di teoria, ma nel caso sia rilevante per qualcosa, sto usando Play Framework 2.4 / Scala.