TsgcWebSocketClient方法 › WriteAndWaitData

WriteAndWaitData 方法

发送文本消息并阻塞调用方,直到服务器以文本消息响应或超时为止。

重载

重载 1

语法

function WriteAndWaitData(const aText: String; const aTimeout: Integer = 10000): string;

参数

名称类型描述
aTextconst String要作为 WebSocket 文本帧发送到服务器的文本载荷。
aTimeoutconst Integer等待服务器响应的最长时间(毫秒)。默认为 10000(10 秒)。

返回值

从服务器接收到的文本消息,或当超时、无可用连接或发生错误时的空字符串。(string

备注

WriteAndWaitData 是一个便捷辅助方法,用于通过 WebSocket 进行请求/响应式交换。它发送文本帧,然后在内部事件上阻塞调用线程,直到下一条来自服务器的文本消息到达或超时触发。由于它会阻塞,因此除非使用较短的超时时间,否则不应从主 UI 线程调用。当客户端未连接或服务器未及时回复时,返回空字符串;套接字级别的异常被捕获并转发到 OnError。当需要发送和接收二进制有效载荷时,请使用流重载。

示例


vReply := oClient.WriteAndWaitData('ping', 5000);
if vReply <> '' then
  ShowMessage(vReply);

重载 2

语法

function WriteAndWaitData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone; const aTimeout: Integer = 10000) : TStream;

参数

名称类型描述
aStreamconst TStream将作为 WebSocket 二进制帧发送的内容的源流。调用方保留流的所有权。
aSizeconst Integer可选的片段大小(字节);当大于零时,传出流将被分割为多个此大小的片段。使用 0(默认值)以单个帧发送整个流。
aStreamingconst TwsStreaming分片传输的流模式(stmNonestmStartstmContinuestmFinish)。默认为 stmNone,发送完整的独立消息。
aTimeoutconst Integer等待服务器响应的最长时间(毫秒)。默认为 10000(10 秒)。

返回值

从服务器接收到的二进制消息的新分配流,如果超时、没有可用连接或发生错误则为 nil。调用方负责释放返回的流。(TStream

备注

此重载是文本重载(另一个重载)的二进制对应版本。它将提供的流作为二进制帧写入,然后在内部事件上阻塞调用线程,直到从服务器收到下一条二进制消息或超时触发。由于会阻塞,请避免在主 UI 线程上使用较长超时调用它。当客户端未连接或服务器未在时限内回复时返回值为 nil;异常被捕获并转发到 OnError。请在使用完成后释放源流(调用后)和返回的流。

示例


oRequest := TMemoryStream.Create;
try
  oRequest.LoadFromFile('request.bin');
  oReply := oClient.WriteAndWaitData(oRequest, 0, stmNone, 5000);
  try
    if Assigned(oReply) then
      oReply.SaveToFile('reply.bin');
  finally
    oReply.Free;
  end;
finally
  oRequest.Free;
end;

返回方法