Desde sgcWebSockets 2023.2.0 se ha implementado una nueva funcionalidad para mejorar el broadcasting de mensajes del servidor. Groups es una nueva funcionalidad en la biblioteca sgcWebSockets que te permite organizar las conexiones (que representan clientes, como navegadores) en grupos con nombre. Esto te permite hacer broadcast de mensajes a todas las conexiones de un grupo en lugar de enviar el mensaje a cada conexión individualmente. Los Groups de sgcWebSockets son útiles cuando quieres difundir un mensaje a un conjunto concreto de clientes, como una sala de chat o un juego multijugador.
Añadir y eliminar usuarios
Para añadir o eliminar usuarios de un grupo, llama a los métodos Add o Remove, pasando el nombre del grupo y la clase TsgcWSConnection. No necesitas eliminar manualmente un usuario del grupo cuando la conexión termina.
El siguiente ejemplo muestra el método Groups.Add.
procedure OnConnect(Connection: TsgcWSConnection);
begin
TsgcWebSocketServer1.Groups.Add('Room1', Connection);
end;
Enviar mensajes a un grupo
Ahora esta conexión está dentro del grupo llamado "Room1". Si hay más usuarios en este grupo, puedes difundir un mensaje a todos los miembros del grupo "Room1" con el método Broadcast.
TsgcWebSocketServer1.Groups.Group['Room1'].Broadcast('Hello Members of Room1');
O puedes enviar un mensaje a todos los grupos que empiecen por "Room" (de modo que si existen Room1, Room2, Room3... esos usuarios recibirán el mensaje).
TsgcWebSocketServer1.Groups.Broadcast('Room*', 'Hello Members of Room1');
El parámetro GroupName de Broadcast utiliza la función MatchesMask para saber si el grupo debe incluirse en el mensaje difundido, de modo que puedes utilizarlo para configuraciones avanzadas.
Eventos del grupo
Hay 2 eventos que puedes usar para gestionar los grupos y los clientes cada vez que se añade un nuevo cliente a un grupo o se elimina:
- OnClientAdded: se llama cada vez que se añade un usuario a un grupo.
- OnClientRemoved: se llama cada vez que un cliente se elimina de un grupo (normalmente al desconectarse).
Ejemplo: enviar un mensaje al grupo cuando un miembro lo abandona.
TsgcWebSocketServer1.Groups.OnClientRemoved := OnClientRemovedEvent;
procedure OnClientRemovedEvent(Sender: TObject; const aGroup: TsgcWSServerGroupItem;
const aConnection: TsgcWSConnection);
begin
aGroup.BroadCast('Client ' + aConnection.Guid + ' has disconnected');
end;
A continuación encontrarás una demo de servidor/cliente que muestra las principales funcionalidades de los Groups de sgcWebSockets.
