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 그룹의 주요 기능을 보여주는 서버/클라이언트 데모를 확인하세요.