Che cosa devo fare:
Mi è stato chiesto di aggiungere una funzionalità a una delle nostre applicazioni che consentirebbe a un supervisore di inviare un messaggio a tutti oa uno degli utenti che attualmente utilizzano l'applicazione.
L'applicazione è un'applicazione winform che utilizza c # ed ef6 con un database mysql e utilizza un server RabbitMQ per scopi diversi.
La mia domanda:
Come posso ottenere o mantenere un elenco di utenti che stanno attualmente utilizzando l'applicazione?
Soluzione 1:
Accedi a un database che sta attualmente utilizzando l'applicazione.
Lo abbiamo fatto in passato per un'altra applicazione, ma non era affidabile perché se l'utente uccide l'applicazione o perde una connessione al database, non scriverà sul database se si disconnette.
Soluzione 2:
Potrei usare il server RabbitMQ. Ogni utente invia un messaggio di "presenza" ogni x secondi per comunicare agli altri utenti che sono ancora connessi. Ogni volta che l'applicazione riceve un messaggio di questo tipo, aggiunge l'utente a un elenco o semplicemente aggiorna l'elenco se l'utente è già nell'elenco. Se un utente non invia un messaggio di "presenza" dopo x secondi, verrà considerato disconnesso.
Sto pensando troppo a questo? C'è un modo migliore per implementare una cosa del genere?
Modifica: sto cercando di evitare di avere un server centrale che manterrebbe la lista degli utenti.