WebSocket Groups: Channels, Users and more

· Funktionen

Ab sgcWebSockets 2023.2.0 wurde ein neues Feature implementiert, das Server-Message-Broadcasting verbessert. Groups ist ein neues Feature in der sgcWebSockets-Bibliothek, mit dem du Verbindungen (die für Clients stehen, etwa Browser) in benannten Gruppen organisieren kannst. Damit kannst du Nachrichten an alle Verbindungen einer Gruppe broadcasten, statt sie einzeln an jede Verbindung zu senden. sgcWebSockets-Groups sind nützlich, wenn du eine Nachricht an eine bestimmte Gruppe von Clients broadcasten willst, zum Beispiel an einen Chatraum oder ein Multiplayer-Spiel.

Nutzer hinzufügen und entfernen

Um Nutzer zu einer Gruppe hinzuzufügen oder zu entfernen, rufst du die Methoden Add oder Remove auf und übergibst den Gruppennamen sowie die TsgcWSConnection-Klasse. Du musst einen Nutzer beim Verbindungsende nicht manuell aus einer Gruppe entfernen.

Das folgende Beispiel zeigt die Methode Groups.Add

procedure OnConnect(Connection: TsgcWSConnection);
begin
  TsgcWebSocketServer1.Groups.Add('Room1', Connection);
end; 

Nachrichten an eine Gruppe senden

Diese Verbindung ist jetzt in der Gruppe "Room1". Sind weitere Nutzer in dieser Gruppe, kannst du mit der Methode Broadcast einfach eine Nachricht an alle Mitglieder der Gruppe "Room1" broadcasten. 

TsgcWebSocketServer1.Groups.Group['Room1'].Broadcast('Hello Members of Room1'); 


Oder du kannst eine Nachricht an alle Gruppen senden, die mit "Room" beginnen (wenn also Room1, Room2, Room3... existieren, erhalten diese Nutzer eine Nachricht). 

TsgcWebSocketServer1.Groups.Broadcast('Room*', 'Hello Members of Room1'); 

Der GroupName-Parameter von Broadcast nutzt die Funktion MatchesMask, um zu entscheiden, ob die Gruppe in die broadcastete Nachricht aufgenommen werden soll. So kannst du ihn für fortgeschrittene Konfigurationen verwenden. 

Gruppen-Ereignisse

Es gibt 2 Ereignisse, mit denen du Gruppen und Clients behandeln kannst, wenn ein neuer Client zu einer Gruppe hinzugefügt oder daraus entfernt wird:

- OnClientAdded: Dieses Ereignis wird jedes Mal ausgelöst, wenn ein Nutzer zu einer Gruppe hinzugefügt wird.

- OnClientRemoved: Wird jedes Mal ausgelöst, wenn ein Client aus einer Gruppe entfernt wird (üblicherweise beim Trennen).

Beispiel: Sende eine Nachricht an die Gruppe, wenn ein Mitglied die Gruppe verlässt.

TsgcWebSocketServer1.Groups.OnClientRemoved := OnClientRemovedEvent;
procedure OnClientRemovedEvent(Sender: TObject; const aGroup: TsgcWSServerGroupItem; 
  const aConnection: TsgcWSConnection);
begin
  aGroup.BroadCast('Client ' + aConnection.Guid + ' has disconnected');
end; 

Unten findest du ein Server/Client-Demo, das die wichtigsten Features von sgcWebSockets-Groups zeigt.