Questo si è rivelato un problema piuttosto interessante in contrasto con le mie aspettative.
Immagina una semplice app di chat, un utente si registra quindi può aggiungere altri utenti al proprio elenco di contatti e avviare conversazioni.
Voglio essere in grado di mostrare in tempo reale lo stato online di ciascun utente (per semplicità solo online / offline). Il problema è come farlo in modo efficiente.
L'app utilizza WebSockets per cui esiste un elenco di connessioni sul server che facilita l'attività e la soluzione più ovvia è quando un utente si connette o disconnette semplicemente trasmesso a tutti gli altri utenti. Questo ovviamente non sarà molto efficiente perché ogni utente che non ha il trigger nella propria lista di contatti semplicemente non si preoccuperà e se il numero di utenti è grande, così sarà sprecata la larghezza di banda.
Una soluzione più ottimizzata sarebbe quella di chiedere a un utente che effettua la connessione di chiedere lo stato di tutti nella propria lista di contatti. Quindi creare un elenco per ciascun utente sul server e memorizzare gli ID di tutti coloro che hanno chiesto il loro stato. In questo modo ogni volta che un utente si connette / disconnette avrò un elenco di utenti che si preoccupano di questo e posso trasmettere l'evento sapendo che nulla va sprecato. Tuttavia ciò che non mi piace di questo è che, come potete vedere, vi è una certa complessità aggiunta allo schema e mantenere tali liste sul server aumenterà la quantità di memoria utilizzata proporzionalmente alla quantità di utenti (che è sempre il caso, ma sembra troppo per un tale compito).
Dato che le app di chat non sono una novità, vorrei chiedere quali sono i metodi utilizzati per tale funzionalità nelle app esistenti o se esiste una soluzione di bullet bullet ben nota.