TsgcWebSocketLoadBalancerServer메서드 › WriteData

WriteData Method

연결 GUID로 식별되는 단일 클라이언트에 WebSocket 메시지를 보내며, 해당 세션을 소유한 백업 서버를 통해 프레임을 라우팅합니다.

Overloads

오버로드 1

구문

function WriteData(const aGuid, aMessage: string): Boolean;

Parameters

NameType설명
aGuidconst string클라이언트 핸드셰이크가 완료되었을 때 백업 서버가 할당한 대상 연결의 식별자입니다.
aMessageconst stringWebSocket 텍스트 프레임으로 해당 클라이언트에 전달할 텍스트 페이로드입니다.

반환 값

주어진 GUID를 가진 연결이 등록된 백업 서버에서 발견되어 프레임이 해당 소켓으로 전달되었을 때 True이고, 클러스터 어디에도 일치하는 활성 연결이 없을 때 False입니다. (Boolean)

설명

이 오버로드는 로드 밸런서에게 GUID가 aGuid와 일치하는 WebSocket 연결을 소유한 백업 서버를 찾아 텍스트 메시지를 해당 단일 클라이언트로 전달하도록 요청합니다. GUID는 TsgcWSConnection.Guid가 노출하는 값으로, 일반적으로 OnConnect에서 캡처되어 애플리케이션에 저장됩니다. 업그레이드된 WebSocket 세션만 자격이 있습니다. 순수한 HTTP 요청에 속한 GUID는 거부되고 False가 반환됩니다. QueueOptions.Text가 qmNone 이외의 값으로 설정되면 프레임은 큐에 보관되어 호출자의 스레드가 아닌 연결 스레드에서 디스패치됩니다(IOHandlerOptions.IOHandlerType = iohIOCP인 경우 지원되지 않음). 클러스터 전체의 모든 활성 클라이언트에 한 번의 호출로 도달하려면 Broadcast를 사용하십시오.

예제


oServer.WriteData('guid', 'My First sgcWebSockets Message!.');

Overload 2

구문

function WriteData(const aGuid: String; aStream: TStream; aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone) : Boolean;

Parameters

NameType설명
aGuidconst String클라이언트 핸드셰이크가 완료되었을 때 백업 서버가 할당한 대상 연결의 식별자입니다.
aStreamTStream내용이 WebSocket 바이너리 프레임으로 클라이언트에게 전송되는 소스 스트림입니다. 호출자가 스트림의 소유자로 유지됩니다.
aSizeInteger선택적 조각 크기(바이트)입니다. 0보다 큰 경우 스트림이 이 크기의 여러 조각으로 분할됩니다. 전체 스트림을 단일 프레임으로 보내려면 0(기본값)을 사용하십시오.
aStreamingconst TwsStreaming프래그먼트 전송을 위한 스트리밍 모드(stmNone, stmStart, stmContinue, stmFinish)입니다. 기본값은 stmNone으로, 완전한 독립 실행형 메시지를 보냅니다.

반환 값

True는 지정된 GUID를 가진 연결이 등록된 백업 서버에서 위치하여 스트림이 해당 소켓으로 전달된 경우이고, False는 클러스터 어디에도 일치하는 활성 연결이 없는 경우입니다. (Boolean)

설명

이 오버로드는 제공된 스트림에서 읽은 바이너리 페이로드로 단일 WebSocket 클라이언트를 대상으로 하며, 바이트를 로드 밸런서를 통해 세션을 소유하는 백업 서버로 라우팅합니다. 스트림은 현재 위치에서 소비되며 로드 밸런서는 소유권을 가지지 않으므로 호출자는 WriteData가 반환될 때까지(또는 큐잉할 때 전송이 완료될 때까지) 이를 활성 상태로 유지해야 합니다. QueueOptions.Binary가 qmNone 이외의 값으로 설정되면 프레임이 큐에 넣어지고 호출자의 스레드가 아닌 연결 스레드에서 디스패치됩니다(IOHandlerOptions.IOHandlerType = iohIOCP일 때 지원되지 않음). 여러 WebSocket 프레임에 걸쳐 프래그먼트화되어야 하는 매우 큰 페이로드를 보낼 때 aStreaming과 함께 aSize를 사용하십시오.

예제


oStream := TMemoryStream.Create;
try
  oStream.LoadFromFile('payload.bin');
  oServer.WriteData('guid', oStream);
finally
  oStream.Free;
end;

메서드로 돌아가기