从 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 群组的主要功能。
