Ecco il mio problema, voglio monitorare se l'utente è online o offline e informare gli altri clienti su di esso. Sto usando gli hub e implementato sia le interfacce IConnected che IDisconnect.C'è un modo per ottenere il numero di connessioni nel gruppo di hub Signalr?
La mia idea era di inviare una notifica a tutti i client quando l'hub rileva la connessione o la disconnessione. Per impostazione predefinita, quando l'utente aggiorna la pagina otterrà un nuovo ID di connessione e alla fine la connessione precedente chiamerà disconnect notificando che gli altri client sono offline anche se è effettivamente online.
Ho provato a utilizzare il proprio ID di restituzione ConnectionIdFactory per l'ID di connessione ma con più schede aperte a un certo punto rileverà la connessione utente disconnessa e dopo quell'hub lato client tenterà di connettersi all'hub senza esito in loop infinito sprecando memoria e cpu che rende il browser quasi inutilizzabile. Avevo bisogno di aggiustarlo velocemente così ho rimosso la mia fabbrica e ora aggiungo ogni nuova connessione al gruppo usando il nome utente, così posso facilmente notificare all'utente singolo su tutte le connessioni, ma poi ho il problema di scoprire se l'utente è online o offline come non so quanti utenti di connessioni attive stanno avendo.
Quindi mi chiedo se c'è un modo per ottenere il numero di connessioni in un gruppo? O se qualcuno ha qualche idea migliore su come tracciare quando l'utente va offline?
sto usando Signalr 0,4
È possibile utilizzare un dizionario> in cui la chiave è il nome utente e hashset contiene le connessioni id (s) per tale utente. numero di utenti = Keys.Count(), # of connections = dict.Values.Sum (x => x.Count()); –
drch
Il sito dovrebbe funzionare nello scenario di Web farm, quindi non posso usare Dizionario. Potrei memorizzare le connessioni in db, ma vorrei evitarlo se possibile. – pajo
Quando si dice che l'utente aggiorna la pagina e ottiene un nuovo ID di connessione, sto memorizzando l'ID di connessione nel mio DB e se l'utente visualizza due pagine sul mio sito dove è lo stesso hub anche l'ID di connessione è lo stesso. Perché ricevi un ID di connessione separato. Penso che puoi ottenere ID diversi solo quando il cliente è diverso. –