Número de usuarios conectados a la Web


SignalR nos permite conocer el numero de usuarios conectados a una aplicación Web.

Como funciona

SignalR nos ofrece eventos para registrar conexiones o desconexiones al Hub.

  • Al iniciar una conexión $.connection.hub.start(); al iniciar nuestra pagina Web, se dispara el evento OnConnected.
  • Al parar una conexión $.connection.hub.stop(); al cerrar nuestra pagina Web; se dispara el evento OnDisconnected.
  • Si cerramos el navegador a los 30 segundos por defecto se dispara el evento OnDisconnected.

En estos eventos:

  • En el evento OnConnected añadimos la conexión (ConnectionId) en una lista de Usuarios conectados.
  • En el evento OnDisconnected eliminamos la conexión (ConnectionId) de la lista de Usuarios conectados.

public class KnowUserHub : Hub
{
        /// <summary>
        /// The list of users connected.
        /// </summary>
        public static List<string> Users = new List<string>();

        /// <summary>
        /// The OnConnected event.
        /// </summary>
        public override System.Threading.Tasks.Task OnConnected()
        {
            string clientId = GetClientId();

            if (Users.IndexOf(clientId) == -1)
            {
                Users.Add(clientId);
            }
            return base.OnConnected();
        }

        /// <summary>
        /// The OnReconnected event.
        /// </summary>
        public override System.Threading.Tasks.Task OnReconnected()
        {
            string clientId = GetClientId();
            if (Users.IndexOf(clientId) == -1)
            {
                Users.Add(clientId);
            }

            return base.OnReconnected();
        }

        /// <summary>
        /// The OnDisconnected event.
        /// </summary>
        public override System.Threading.Tasks.Task OnDisconnected()
        {
            string clientId = GetClientId();

            if (Users.IndexOf(clientId) > -1)
            {
                Users.Remove(clientId);
            }

            return base.OnDisconnected();
        }

        /// <summary>
        /// Get's the currently connected Id of the client.
        /// This is unique for each client and is used to identify
        /// a connection.
        /// </summary>
        /// <returns>The client Id.</returns>
        private string GetClientId()
        {
            return Context.ConnectionId;
        }

}

Para conocer el número de usuarios conectados; podemos obtenerlo fácilmente ;-).

   var userCount = KnowUserHub.Users.Count;
Anuncios
Esta entrada fue publicada en SignalR y etiquetada , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s