TsgcWebSocketClient › 方法 › WriteData
向 WebSocket 服务器发送文本消息,可选地将其拆分为指定大小的分片。
procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| 名称 | 类型 | 描述 |
|---|---|---|
aText | const String | 要作为 WebSocket 文本帧发送到服务器的文本载荷。 |
aSize | const Integer | 可选的片段大小(字节);大于零时,消息将被拆分为多个该大小的片段。使用 0(默认值)将整条消息作为单帧发送。 |
aStreaming | const TwsStreaming | 分片传输的流模式(stmNone、stmStart、stmContinue、stmFinish)。默认为 stmNone,发送完整的独立消息。 |
WriteData 将字符串作为 WebSocket 文本帧在活动连接上传输。默认情况下,调用在调用线程上运行,并在字节交给套接字后返回。当 QueueOptions.Text 设置为 qmNone 以外的值时,消息将被排队并从连接自身的线程实际发送,这可以防止多线程并发写入时出现锁。任何套接字异常都将转发到 OnError。发送大型载荷或二进制数据时请使用流重载。
当客户端未连接,或其 WebSocket 握手尚未完成时,不会发送任何内容,该失败会通过 OnError 报告,并将 Connection 设为 nil,错误信息为 Data not sent, the client is not connected or its handshake has not completed.(resourcestring S_ERROR_CLIENT_NOT_CONNECTED)。该事件会在 WriteData 返回之前于调用线程上触发,且 LastError 保存相同的文本。不会向调用方引发异常,客户端也不会断开连接。将 Options.RaiseDisconnectExceptions 设置为 False 可跳过此报告,像早期版本一样静默丢弃该消息。当写入失败是因为其连接已丢失且客户端已经重新连接时,该失败同样会以 Connection = nil 报告,从而使新连接保持打开。
oClient.WriteData('My First sgcWebSockets Message!.');
procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| 名称 | 类型 | 描述 |
|---|---|---|
aStream | const TStream | 将作为 WebSocket 二进制帧发送的内容的源流。调用方保留流的所有权。 |
aSize | const Integer | 可选的片段大小(字节);当大于零时,流将被分割为多个此大小的片段。使用 0(默认值)以单个帧发送整个流。 |
aStreaming | const TwsStreaming | 分片传输的流模式(stmNone、stmStart、stmContinue、stmFinish)。默认为 stmNone,发送完整的独立消息。 |
WriteData 从流的当前位置读取所提供的流,并将内容作为 WebSocket 二进制帧传输。默认情况下调用在调用线程上运行;当 QueueOptions.Binary 设置为非 qmNone 的值时,消息会被排队并从连接线程实际分发。套接字异常被捕获并转发到 OnError。当客户端未连接,或其握手尚未完成时,不会发送任何内容,失败会通过 OnError 报告,并将 Connection 设为 nil,如文本重载中所述。仅在调用返回后(排队时则在发送完成后)释放流。
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oClient.WriteData(oStream);
finally
oStream.Free;
end;