WebSocket グループ:チャンネル・ユーザーほか

· 機能

sgcWebSockets 2023.2.0 から、サーバーメッセージブロードキャストを改善する新機能が実装されました。グループは sgcWebSockets ライブラリの新機能で、接続(ブラウザなどのクライアントを表す)を名前付きグループに整理できます。これにより各接続に個別にメッセージを送信する代わりに、グループ内のすべての接続にメッセージをブロードキャストできます。sgcWebSockets グループはチャットルームやマルチプレイヤーゲームなど、特定のクライアントセットにメッセージをブロードキャストしたいシナリオに便利です。

ユーザーの追加と削除

グループにユーザーを追加または削除するには、Add または Remove メソッドを呼び出し、グループ名と TsgcWSConnection クラスを渡します。接続が終了した際にユーザーをグループから手動で削除する必要はありません。

以下の例は Groups.Add メソッドを示しています。

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

グループへのメッセージ送信

この接続が「Room1」というグループ内にある場合、そのグループに他のユーザーがいれば Broadcast メソッドを使用して「Room1」グループのすべてのメンバーにメッセージをブロードキャストできます。

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


または「Room」で始まるすべてのグループにメッセージを送信することもできます(Room1・Room2・Room3 が存在する場合、それらのユーザーがメッセージを受け取ります)。

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

Broadcast の GroupName パラメーターは MatchesMask 関数を使用してグループをブロードキャストメッセージに含めるかどうかを判断するため、高度な設定に利用できます。

グループイベント

新しいクライアントがグループに追加またはグループから削除されるたびにグループとクライアントを処理するために使用できる 2 つのイベントがあります:

- OnClientAdded:ユーザーがグループに追加されるたびに呼び出されます。

- OnClientRemoved:クライアントがグループから削除されるたびに呼び出されます(通常は切断時)。

例:メンバーがグループを離れた際にグループにメッセージを送信します。

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

以下に sgcWebSockets グループの主な機能を示すサーバー/クライアントデモがあります。