TsgcWebSocketLoadBalancerServerMétodos › Broadcast

Broadcast Método

Distribuye un mensaje WebSocket a todos los servidores de respaldo del clúster, opcionalmente filtrado por canal, protocolo o lista de GUID de conexión.

Sobrecargas

Sobrecarga 1

Sintaxis

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

Parámetros

NombreTipoDescripción
aMessageconst stringCarga útil de texto entregada a cada cliente coincidente como un frame de texto WebSocket.
aChannelconst stringCuando no está vacío, el mensaje se envía únicamente a los clientes suscritos al canal indicado.
aProtocolconst stringCuando no está vacío, el mensaje se envía únicamente a los clientes que utilizan el subprotocolo WebSocket indicado.
Excludeconst StringLista separada por comas de GUIDs de conexión que deben omitirse en esta difusión.
Includeconst StringLista separada por comas de GUIDs de conexión que restringen la difusión a ese subconjunto; se ignora cuando está vacía.

Observaciones

Esta sobrecarga envía una trama de texto a través del balanceador de carga para que cada servidor de backup registrado la reenvíe a sus propios clientes WebSocket conectados localmente. Los filtros se combinan con semántica AND: una conexión recibe el mensaje solo cuando satisface todos los filtros no vacíos, y nunca se alcanza cuando su GUID aparece en Exclude. Las solicitudes HTTP/HTTP2 puras se ignoran porque Broadcast solo se dirige a clientes que completaron el protocolo de enlace WebSocket. El balanceador de carga reenvía la carga útil a cada nodo de backup en orden; los errores de escritura por conexión se notifican a través de OnException sin abortar la difusión. La llamada se ejecuta en el hilo del llamador y retorna una vez que las tramas se entregan a cada enlace hacia los servidores de backup.

Ejemplo


oServer.Broadcast('Hello From Server');

Sobrecarga 2

Sintaxis

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

NombreTipoDescripción
aStreamTStreamFlujo de origen cuyo contenido se entrega a cada cliente coincidente como un frame binario de WebSocket. El llamador sigue siendo el propietario del flujo.
aChannelconst stringCuando no está vacío, el mensaje se envía únicamente a los clientes suscritos al canal indicado.
aProtocolconst stringCuando no está vacío, el mensaje se envía únicamente a los clientes que utilizan el subprotocolo WebSocket indicado.
Excludeconst StringLista separada por comas de GUIDs de conexión que deben omitirse en esta difusión.
Includeconst StringLista separada por comas de GUIDs de conexión que restringen la difusión a ese subconjunto; se ignora cuando está vacía.
aSizeconst IntegerTamaño de fragmento opcional en bytes; cuando es mayor que cero, cada cliente recibe el flujo dividido en fragmentos de este tamaño. Use 0 (el valor predeterminado) para enviar el flujo completo como un único fotograma.
aStreamingconst TwsStreamingModo de transmisión para la transmisión fragmentada (stmNone, stmStart, stmContinue, stmFinish). El valor predeterminado es stmNone, que envía un mensaje completo independiente.

Observaciones

Esta sobrecarga transmite el contenido del flujo como un marco binario a través del balanceador de carga, que reenvía la carga útil a todos los servidores de respaldo registrados para que puedan redistribuirla a sus clientes WebSocket locales. El flujo se lee desde su posición actual; el balanceador de carga no asume su propiedad, por lo que el llamador debe mantener el flujo activo hasta que Broadcast retorne. Los filtros de canal, protocolo, Include y Exclude se evalúan en cada nodo de respaldo al despachar el marco a sus propias conexiones. Use aSize junto con aStreaming para transmitir cargas útiles muy grandes como múltiples fragmentos WebSocket en lugar de un único marco de gran tamaño.

Ejemplo


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

Volver a Métodos