TsgcWebSocketProxyServer › Métodos › Broadcast

Broadcast Método

Envia a mesma mensagem a todos os clientes WebSocket conectados no proxy, opcionalmente filtrados por canal, protocolo ou lista de GUID de conexão.

Overloads

Overload 1

Sintaxe

procedure Broadcast(const aMessage: string; const aChannel: string = ''; const aProtocol: string = ''; const Exclude: String = ''; const Include: String = '');

Parâmetros

NameTypeDescrição
aMessageconst stringPayload de texto entregue a cada cliente WebSocket correspondente como um frame de texto.
aChannelconst stringQuando não vazio, a mensagem é enviada apenas a clientes assinantes do canal informado.
aProtocolconst stringQuando não vazia, a mensagem é enviada apenas a clientes que utilizam o subprotocolo WebSocket fornecido.
Excludeconst StringLista separada por vírgulas de GUIDs de conexão que devem ser ignorados por este broadcast.
Includeconst StringLista de GUIDs de conexão separados por vírgula que restringe o broadcast a esse subconjunto; ignorado quando vazio.

Observações

Esta sobrecarga envia um frame de texto para cada conexão WebSocket ativa que corresponda aos filtros fornecidos. Os filtros são combinados com semântica AND: uma conexão recebe a mensagem apenas quando satisfaz cada filtro não vazio, e nunca é alcançada quando seu GUID aparece em Exclude. Os frames são escritos no lado voltado ao navegador de cada túnel; o link TCP upstream pareado não é tocado, portanto os dados destinados ao backend devem, em vez disso, ser enviados pelo caminho de encaminhamento por conexão. Quando LoadBalancer está habilitado, a chamada é encaminhada por todo o cluster, de modo que os nós remotos também entregam a mensagem aos seus clientes locais. A chamada é executada na thread do chamador e retorna assim que os frames são entregues a cada socket; erros de escrita por conexão são reportados através de OnException sem abortar o broadcast.

Exemplo


oServer.Broadcast('Hello From Proxy Server');

Sobrecarga 2

Sintaxe

procedure Broadcast(aStream: TStream; const aChannel: string = ''; const aProtocol: string = ''; const Exclude: String = ''; const Include: String = ''; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);

Parâmetros

NameTypeDescrição
aStreamTStreamStream de origem cujo conteúdo é entregue a cada cliente WebSocket correspondente como um quadro binário. O chamador permanece o proprietário do stream.
aChannelconst stringQuando não vazio, a mensagem é enviada apenas a clientes assinantes do canal informado.
aProtocolconst stringQuando não vazia, a mensagem é enviada apenas a clientes que utilizam o subprotocolo WebSocket fornecido.
Excludeconst StringLista separada por vírgulas de GUIDs de conexão que devem ser ignorados por este broadcast.
Includeconst StringLista de GUIDs de conexão separados por vírgula que restringe o broadcast a esse subconjunto; ignorado quando vazio.
aSizeconst IntegerTamanho de fragmento opcional em bytes; quando maior que zero, cada cliente recebe o stream dividido em fragmentos deste tamanho. Utilize 0 (o padrão) para enviar o stream inteiro como um único frame.
aStreamingconst TwsStreamingModo de streaming para transmissão fragmentada (stmNone, stmStart, stmContinue, stmFinish). Padrão stmNone, que envia uma mensagem completa e independente.

Observações

Esta sobrecarga transmite o conteúdo do stream como um quadro binário para cada conexão WebSocket que passa pelos filtros de canal, protocolo, Include e Exclude. O stream é lido a partir de sua posição atual; o servidor não assume a propriedade, então o chamador deve manter o stream ativo até que Broadcast retorne. O payload binário é entregue apenas no lado voltado ao navegador de cada túnel; os clientes TCP upstream que alimentam o backend Proxy não são escritos por esta chamada. Quando LoadBalancer está habilitado, o payload binário é encaminhado para outros nós para que possam reentregá-lo aos seus clientes locais. Use aSize junto com aStreaming para transmitir payloads muito grandes como múltiplos fragmentos WebSocket em vez de um quadro de tamanho excessivo.

Exemplo


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

Voltar para Métodos