TsgcWebSocketProxyServer › Methods › Broadcast
向代理上所有已连接的 WebSocket 客户端发送相同的消息,可选地按频道、协议或连接 GUID 列表进行过滤。
procedure Broadcast(const aMessage: string; const aChannel: string = ''; const aProtocol: string = ''; const Exclude: String = ''; const Include: String = '');
| 名称 | 类型 | 描述 |
|---|---|---|
aMessage | const string | 作为文本帧发送给每个匹配的 WebSocket 客户端的文本负载。 |
aChannel | const string | 当非空时,消息仅发送给订阅了给定频道的客户端。 |
aProtocol | const string | 当非空时,消息仅发送给使用给定 WebSocket 子协议的客户端。 |
Exclude | const String | 此广播应跳过的连接 GUID 的逗号分隔列表。 |
Include | const String | 以逗号分隔的连接 GUID 列表,将广播限制在该子集内;为空时忽略。 |
此重载将文本帧发送到每个与提供的过滤器匹配的活跃 WebSocket 连接。过滤器以 AND 语义组合:只有当连接满足每个非空过滤器时才接收消息,当其 GUID 出现在 Exclude 中时永远不会接收。帧被写入每个隧道的面向浏览器的一侧;配对的上游 TCP 链路不受影响,因此面向后端的数据必须通过每个连接的转发路径推送。当 LoadBalancer 启用时,调用将在集群中转发,使远程节点也将消息传递给其本地客户端。调用在调用方的线程上运行,并在帧交给每个套接字后返回;每个连接的写入错误通过 OnException 报告,而不会中止广播。
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);
| 名称 | 类型 | 描述 |
|---|---|---|
aStream | TStream | 源流,其内容作为二进制帧投递给每个匹配的 WebSocket 客户端。调用方保留流的所有权。 |
aChannel | const string | 当非空时,消息仅发送给订阅了给定频道的客户端。 |
aProtocol | const string | 当非空时,消息仅发送给使用给定 WebSocket 子协议的客户端。 |
Exclude | const String | 此广播应跳过的连接 GUID 的逗号分隔列表。 |
Include | const String | 以逗号分隔的连接 GUID 列表,将广播限制在该子集内;为空时忽略。 |
aSize | const Integer | 可选的分片大小(字节);大于零时,每个客户端以该大小的分片接收流。使用 0(默认值)将整个流作为单个帧发送。 |
aStreaming | const TwsStreaming | 分片传输的流模式(stmNone、stmStart、stmContinue、stmFinish)。默认为 stmNone,发送完整的独立消息。 |
此重载将流内容作为二进制帧广播到通过通道、协议、Include 和 Exclude 过滤器的每个 WebSocket 连接。流从当前位置开始读取;服务器不获取所有权,因此调用方必须在 Broadcast 返回之前保持流存活。二进制负载仅在每个隧道的浏览器侧投递;为 Proxy 后端提供数据的上游 TCP 客户端不会被此调用写入。当启用 LoadBalancer 时,二进制负载将转发给其他节点,以便它们向本地客户端重新投递。结合使用 aSize 和 aStreaming 可将超大负载作为多个 WebSocket 分片而非一个超大帧进行流式传输。
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.Broadcast(oStream);
finally
oStream.Free;
end;