簡體   English   中英

Delphi,Indy,如何高效發送記錄

[英]Delphi, Indy, how to send records efficiently

通過IndyTCPClientIndyTCPServer傳輸記錄數據時,我總是使用一種簡單的方法 - 所有記錄都具有固定大小並放置到 stream: 在客戶端:

  type
    TUser = record
      i:integer;
      s:string[100];
      i64:Int64;
      s2:string[200];
    end;

  with idClient.Socket do
    begin
      MStream := TMemoryStream.Create;
      try
        MStream.Write(User, sizeOf(TUser));
        MStream.Seek(0, soBeginning);
        write(MStream, MStream.Size);
      finally
        MStream.Free;
      end;
    end;

在服務器端:

  with AIdCondext.Connection.Socket do
  begin
    MStream := TMemoryStream.Create;
    try
      ReadStream(MStream, sizeOf(TUser), False);
      MStream.Seek(0, soBeginning);
      MStream.read(User, MStream.Size);
    finally
      MStream.Free;
    end;
  end;

它工作正常,但似乎不是很有效,因為我需要使用幾乎總是空的固定長度字符串,而且記錄通常作為需要發送的大型 arrays 的一部分。 有沒有辦法在不單獨發送記錄成員的情況下更有效地做到這一點?

您的要求需要權衡取舍。 如果您希望線路上的傳輸更高效(更少帶寬等),那么您需要編寫更多代碼來將每條記錄序列化為線路上更有效的格式。 否則,您可以編寫更簡單的代碼(例如,使用TIdMemoryBufferStream而不是TMemoryStream ),這將允許您使用更少的代碼傳輸大量數據,但代價是使用效率較低的傳輸格式。 因此,您需要決定什么更適合您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM