Grupos en SignalR: administración y opciones de comunicación

En el post anterior vimos las distintas formas que tenemos disponibles en SignalR para poder comunicarse con los clientes de la aplicación, siendo los grupos la forma más completa y compleja, y por lo tanto merecedora de su propio post 😉

Los grupos nos permiten concentrar varios clientes a través de un identificador global, lo cual nos permite poder comunicarnos con los mismos a demanda sin preocuparnos por los clientes en sí que están en el grupo, más allá del momento en el cual lo creamos. Esto nos permite separar la responsabilidad del uso de grupos en dos partes: administrar los grupos y comunicarse con los clientes que los componen.

Administrando los grupos

Comencemos por el primer punto, cómo crear un grupo y agregarle como integrante un cliente? Ambas cosas se hacen directamente en un mismo método, como se puede ver a continuación:

En el Hub de SignalR tenemos disponible el elemento Groups (al igual que Clients) sobre el cual podemos ejecutar la operación Add. En la misma deberemos pasar dos parámetros, el ConnectionId del cliente que queremos agregar al grupo y el nombre/identificador del mismo. Lo que pasará aquí internamente es que si no existe el grupo con el nombre indicado se creará el mismo y luego agregará el cliente. Cabe destacar que un cliente puede estar en todos los grupos que se requiera, o en ninguno.

Con esto tenemos el primer punto de la administración de los grupos en SignalR. Lo siguiente que nos quedará por hacer será eliminar integrantes de un grupo, lo cual haremos de forma muy similar. En vez de ejecutar la función Add invocaremos Remove indicando nuevamente el ConnectionId del cliente a quitar del grupo y el nombre del grupo en cuestión.

Con estos dos métodos podremos dar forma a nuestros grupos, administrando los integrantes de cada uno. Bien sencillo y práctico.

Estableciendo la comunicación con los clientes del grupo

En el post anterior vimos el ejemplo de uso más común en los grupos, en el cual nos comunicamos con todos lo clientes de un determinado grupo:

Pero también tenemos algunas variantes más para utilizar, las cuales podemos ver a continuación:

  • Clients.Group(grupo): Establezco la comunicación con todos los clientes del grupo.
  • Clients.Group(grupo, clientesParaExcluir): Establezco la comunicación con los clientes del grupo indicado, excepto los ConnectionId’s de los clientes a excluir.
  • Clients.OthersInGroup(grupo): Establezco la comunicación con los otros clientes del grupo, es decir sin contar con el cliente que invocó al Hub.
  • Clients.OthersInGroups(listaDeGrupos): Establezco la comunicación con todos los clientes de los grupos indicados.
  • Clients.Groups(listaDeGrupos, clientesParaExcluir): Establezco la comunicación con los clientes de los grupos indicados, excepto los ConnectionId’s de los clientes a excluir.

Y un ejemplo mínimo de uso de cada uno de los mismos con los comentarios asociados:

Como podemos apreciar la mayor parte son variantes que nos dan mayor flexibilidad a la hora de poder gestionar la comunicación dentro de los grupos. A la vez algunos son conceptos que ya teníamos sobre Clients y también podemos aplicar sobre Groups, como Others.

A su vez tenemos funciones donde de forma opcional podemos indicar si dentro del grupo queremos excluir determinados clientes, indicando como params los ConnectionId’s en cuestión.

Como conclusión vuelvo al punto que destacaba en el post anterior donde vimos las formas disponibles para comunicarnos con los clientes: los grupos es la herramienta que más posibilidades nos da para la comunicación con los clientes, ya que con algo de lógica del lado del servidor para gestionar la pertenencia y nombres de los distintos grupos podremos lograr una aplicación con un muy buen comportamiento para el usuario final, además de que nuestro código es simple y eficiente (recordemos todos los beneficios que nos daba el uso de SignalR).

Gracias por leer!

Anuncios

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