При передаче данных записей через IndyTCPClient
и IndyTCPServer
я всегда использую простой подход - все записи имеют фиксированный размер и помещаются в поток: на стороне клиента:
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;
Работает нормально, но кажется не очень эффективным, потому что мне нужно использовать строки фиксированной длины, которые почти всегда пусты, а также записи часто входят в состав больших массивов, которые необходимо отправить , Есть ли способ сделать это более эффективно, не отправляя записи участников отдельно?