TsgcWebSocketServer_HTTPAPI › 方法 › WriteData
向由连接 GUID 标识的单个客户端发送消息。
function WriteData(const aGUID, aMessage: string): Boolean;
| 名称 | 类型 | 描述 |
|---|---|---|
aGUID | const string | 客户端握手完成时服务器分配的目标连接标识符。 |
aMessage | const string | 以 WebSocket 文本帧形式投递给该客户端的文本载荷。 |
当找到具有给定 GUID 的连接并将帧传递给其 HTTP.sys 套接字时为 True;当不存在匹配的活跃连接时为 False。(Boolean)
此重载查找 GUID 与 aGUID 匹配的连接,并将文本消息发送至该单个客户端。GUID 是 TsgcWSConnection.Guid 公开的值,通常在 OnConnect 中捕获并由应用程序存储。当 QueueOptions.Text 设置为 qmNone 以外的值时,帧将被排队并从连接线程而非调用者线程分发,从而防止多个线程向同一客户端发送时发生锁定。启用 Asynchronous 后,该方法在 HTTP.sys 完成写入帧之前返回;完成情况通过 OnAsynchronous 报告。使用 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 的连接且流已交给其 HTTP.sys 套接字时,返回 True;当不存在匹配的活动连接时,返回 False。(Boolean)
此重载针对单个客户端,使用从提供的流中读取的二进制载荷。流从当前位置开始消费,服务器不获取其所有权,因此调用方必须保持流存活,直到 WriteData 返回(或者,当启用队列或 Asynchronous 时,直到发送实际完成)。当 QueueOptions.Binary 设置为 qmNone 以外的值时,帧将入队并从连接线程(而非调用方线程)分发。当发送非常大的载荷且希望将其分片到多个 WebSocket 帧而非在 HTTP.sys 中缓冲为一条超大消息时,请结合 aStreaming 使用 aSize。
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oServer.WriteData('guid', oStream);
finally
oStream.Free;
end;