TsgcWebSocketLoadBalancerServer › Methods › WriteData
通过备份服务器将 WebSocket 消息发送给由连接 GUID 标识的单个客户端,该备份服务器拥有对应的会话。
function WriteData(const aGuid, aMessage: string): Boolean;
| 名称 | 类型 | 描述 |
|---|---|---|
aGuid | const string | 握手完成时备用服务器分配给客户端的目标连接标识符。 |
aMessage | const string | 以 WebSocket 文本帧形式投递给该客户端的文本载荷。 |
True 表示在已注册的备用服务器上找到了具有给定 GUID 的连接且帧已转发至其套接字;False 表示集群中任何位置均不存在匹配的活动连接。(Boolean)
此重载要求负载均衡器找到拥有与 aGuid 匹配的 WebSocket 连接的备份服务器,并将文本消息转发给该单个客户端。GUID 是 TsgcWSConnection.Guid 公开的值,通常在 OnConnect 中捕获并由应用程序存储。仅升级后的 WebSocket 会话符合条件;属于纯 HTTP 请求的 GUID 将被拒绝并返回 False。当 QueueOptions.Text 设置为 qmNone 以外的值时,帧将从连接线程而不是调用者线程排队并分发(当 IOHandlerOptions.IOHandlerType = iohIOCP 时不支持)。使用 Broadcast 可在一次调用中覆盖集群中的所有活跃客户端。
oServer.WriteData('guid', 'My First sgcWebSockets Message!.');
function WriteData(const aGuid: String; aStream: TStream; aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone) : Boolean;
| 名称 | 类型 | 描述 |
|---|---|---|
aGuid | const String | 握手完成时备用服务器分配给客户端的目标连接标识符。 |
aStream | TStream | 包含发送给客户端内容的源流,作为 WebSocket 二进制帧。调用方仍是流的所有者。 |
aSize | Integer | 可选的片段大小(字节);当大于零时,流将被分割为多个此大小的片段。使用 0(默认值)以单个帧发送整个流。 |
aStreaming | const TwsStreaming | 分片传输的流模式(stmNone、stmStart、stmContinue、stmFinish)。默认为 stmNone,发送完整的独立消息。 |
当找到具有给定 GUID 的连接在已注册的备份服务器上时,且流已被转发到其套接字时为 True;当整个集群中不存在匹配的活动连接时为 False。(Boolean)
此重载针对单个 WebSocket 客户端,以二进制载荷从提供的流中读取,通过负载均衡器路由字节到拥有该会话的备份服务器。流从当前位置开始消费,负载均衡器不拥有该流的所有权,因此调用方必须在 WriteData 返回之前(或在排队时,直到发送完成之前)保持流有效。当 QueueOptions.Binary 设置为 qmNone 以外的值时,帧将被排队并从连接线程分发,而非从调用方线程分发(当 IOHandlerOptions.IOHandlerType = iohIOCP 时不支持)。当发送应跨多个 WebSocket 帧分片的超大载荷时,请将 aSize 与 aStreaming 配合使用。
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.WriteData('guid', oStream);
finally
oStream.Free;
end;