TsgcWebSocketLoadBalancerServer › Métodos › Broadcast
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.
procedure Broadcast(const aMessage: string; const aChannel: string = ''; const aProtocol: string = ''; const Exclude: String = ''; const Include: String = '');
| Nombre | Tipo | Descripción |
|---|---|---|
aMessage | const string | Carga útil de texto entregada a cada cliente coincidente como un frame de texto WebSocket. |
aChannel | const string | Cuando no está vacío, el mensaje se envía únicamente a los clientes suscritos al canal indicado. |
aProtocol | const string | Cuando no está vacío, el mensaje se envía únicamente a los clientes que utilizan el subprotocolo WebSocket indicado. |
Exclude | const String | Lista separada por comas de GUIDs de conexión que deben omitirse en esta difusión. |
Include | const String | Lista separada por comas de GUIDs de conexión que restringen la difusión a ese subconjunto; se ignora cuando está vacía. |
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.
oServer.Broadcast('Hello From Server');
procedure Broadcast(aStream: TStream; const aChannel: string = ''; const aProtocol: string = ''; const Exclude: String = ''; const Include: String = ''; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Nombre | Tipo | Descripción |
|---|---|---|
aStream | TStream | Flujo de origen cuyo contenido se entrega a cada cliente coincidente como un frame binario de WebSocket. El llamador sigue siendo el propietario del flujo. |
aChannel | const string | Cuando no está vacío, el mensaje se envía únicamente a los clientes suscritos al canal indicado. |
aProtocol | const string | Cuando no está vacío, el mensaje se envía únicamente a los clientes que utilizan el subprotocolo WebSocket indicado. |
Exclude | const String | Lista separada por comas de GUIDs de conexión que deben omitirse en esta difusión. |
Include | const String | Lista separada por comas de GUIDs de conexión que restringen la difusión a ese subconjunto; se ignora cuando está vacía. |
aSize | const Integer | Tamañ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. |
aStreaming | const TwsStreaming | Modo de transmisión para la transmisión fragmentada (stmNone, stmStart, stmContinue, stmFinish). El valor predeterminado es stmNone, que envía un mensaje completo independiente. |
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.
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.Broadcast(oStream);
finally
oStream.Free;
end;