TsgcWebSocketLoadBalancerServer › 方法 › 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 中的连接永远不会收到。纯 HTTP/HTTP2 请求会被忽略,因为 Broadcast 只针对完成了 WebSocket 握手的客户端。负载均衡器依次将载荷转发给每个备份节点;每个连接的写入错误通过 OnException 报告,而不会中止广播。调用在调用方线程上运行,并在帧交付给每条通往备份服务器的链路后返回。
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);
| 名称 | 类型 | 描述 |
|---|---|---|
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,发送完整的独立消息。 |
此重载通过负载均衡器以二进制帧广播流内容,负载均衡器将有效载荷转发给每个已注册的备用服务器,以便它们将其重新投递给各自的本地 WebSocket 客户端。流从当前位置读取;负载均衡器不取得其所有权,因此调用方必须在 Broadcast 返回之前保持流的有效性。channel、protocol、Include 和 Exclude 过滤器将在每个备用节点向其自身连接派发帧时进行评估。在发送超大有效载荷时,请将 aSize 与 aStreaming 配合使用,以分片为多个 WebSocket 片段,而非发送单个超大帧。
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.Broadcast(oStream);
finally
oStream.Free;
end;