TsgcWebSocketProxyServer › Métodos › Broadcast
Envía el mismo mensaje a todos los clientes WebSocket conectados al proxy, opcionalmente filtrados 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 | Payload de texto entregado a cada cliente WebSocket coincidente como un frame de texto. |
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 cada conexión WebSocket activa que coincide con los filtros proporcionados. Los filtros se combinan con semántica AND: una conexión recibe el mensaje solo cuando satisface cada filtro no vacío, y nunca se alcanza cuando su GUID aparece en Exclude. Las tramas se escriben en el lado orientado al navegador de cada túnel; el enlace TCP ascendente emparejado no se toca, por lo que los datos destinados al backend deben enviarse a través de la ruta de reenvío por conexión. Cuando LoadBalancer está habilitado, la llamada se reenvía por todo el clúster para que los nodos remotos también entreguen el mensaje a sus clientes locales. La llamada se ejecuta en el hilo del llamador y retorna una vez que las tramas se entregan a cada socket; los errores de escritura por conexión se notifican a través de OnException sin interrumpir la difusión.
oServer.Broadcast('Hello From Proxy 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 WebSocket coincidente como un frame binario. El llamante 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 difunde el contenido del stream como un frame binario a cada conexión WebSocket que supera los filtros de canal, protocolo, Include y Exclude. El stream se lee desde su posición actual; el servidor no toma posesión de él, por lo que el llamador debe mantenerlo activo hasta que Broadcast retorne. El contenido binario se entrega únicamente en el lado del navegador de cada túnel; los clientes TCP ascendentes que alimentan el backend de Proxy no reciben escrituras de esta llamada. Cuando LoadBalancer está habilitado, el contenido binario se reenvía a otros nodos para que puedan redistribuirlo a sus clientes locales. Use aSize junto con aStreaming para transmitir cargas muy grandes como múltiples fragmentos WebSocket en lugar de un único frame sobredimensionado.
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.Broadcast(oStream);
finally
oStream.Free;
end;