Il miglior approccio per la sincronizzazione in tempo reale + condiviso?

1

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.

    
posta Ixxzz 25.11.2015 - 18:07
fonte

3 risposte

0

Ok ho finito con l'implementazione di publish / subscribe, usando websockets. Ho implementato un set di dizionari per diverse categorie (come le liste di cose da fare o gli eventi a utente singolo), in cui le chiavi sono l'argomento (nel mio caso uuid di elenco o utenti) e i valori l'elenco degli iscritti. Riguardo ai dettagli di implementazione, l'ho fatto usando gli attori Play e Akka.

    
risposta data 15.12.2015 - 15:04
fonte
1

Sembra un classico scenario di pubblicazione / sottoscrizione. Ti suggerirei di utilizzare un progetto pub / sub sul back-end (ad es., JMS o AMQP) e di utilizzare un framework JavaScript AMQP / JMS- > per il tuo browser front-end. Ecco un esempio: link Molto semplice.

    
risposta data 25.11.2015 - 20:22
fonte
0

Se l'utilizzo di un servizio cloud basato su abbonamento è un'opzione per il tuo caso d'uso, dovresti dare un'occhiata a Realtime Cloud Storage (la società per cui lavoro).

È un backend di dati (basato su AWS DynamoDB) con funzionalità di sincronizzazione dei dati in tempo reale scalabili. Altro su link

Abbiamo anche una demo di todo on-line scritta in JavaScript all'indirizzo link

    
risposta data 26.11.2015 - 12:28
fonte

Leggi altre domande sui tag