我有一个客户端/服务器应用程序,使用DelphiXe2编写,使用Indy TIdTCPServer和TIdTCPClient相互通信,使用TCP地址127.0.0.1在同一台计算机上。
当我每秒使用大约1兆字节(8兆比特)的数据时,一切正常。
但是,当我将我的数据设置为更高的速度,例如20兆字节/秒(160兆比特),它就会变慢并开始表现出奇怪的行为。
这种速度的行为是否很常见?此外,我似乎找不到任何关于两个本地应用程序之间的最大数据传输速度的基准或信息。
谢谢!
我有一个客户端/服务器应用程序,使用DelphiXe2编写,使用Indy TIdTCPServer和TIdTCPClient相互通信,使用TCP地址127.0.0.1在同一台计算机上。
当我每秒使用大约1兆字节(8兆比特)的数据时,一切正常。
但是,当我将我的数据设置为更高的速度,例如20兆字节/秒(160兆比特),它就会变慢并开始表现出奇怪的行为。
这种速度的行为是否很常见?此外,我似乎找不到任何关于两个本地应用程序之间的最大数据传输速度的基准或信息。
谢谢!
进行带宽测试。这是我使用的方法(我已经附上了相关的服务器和客户端代码)。顺便说一句,我最高能获得大约500Mbps的速度,尽管我无法处理那么快的数据。
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
lData: TByteDynArray;
lCaption: string;
lMbps: Real;
lLen: Integer;
begin
AContext.Connection.IoHandler.CheckForDataOnSource;
SetLength(lData, 0);
AContext.Connection.IoHandler.InputBuffer.ExtractToBytes(TIdBytes(lData),
AContext.Connection.IoHandler.InputBuffer.Size);
lLen := Length(lData);
if lLen > 0 then begin
if FStartTime = 0 then begin
Memo1.Lines.Add(FormatDateTime('dd/mm/yyyy hh:nn:ss.zzz', CsiNow) +': Started test');
FStartTime := CsiNow;
end;
Inc(FBytesReceived, lLen);
lCaption := 'MBits Received: ' + CsiPadFloat(FBytesReceived * 1.0 / 125000, 3, 1);
if lCaption <> FLastCaption then begin
Label1.Caption := lCaption;
FLastCaption := lCaption;
end;
if FBytesReceived >= 12500000 then begin
FStopTime := CsiNow;
lMbps := 100000 / MilliSecondsBetween(FStopTime, FStartTime);
Memo1.Lines.Add(FormatDateTime('dd/mm/yyyy hh:nn:ss.zzz', CsiNow) +
': Finished test (' + CsiPadFloat(lMbps, 3, 1) + ' Mbps)');
FBytesReceived := 0;
FStartTime := 0;
end
end;
CsiSleep(0);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
lData: TByteDynArray;
lIndex: Integer;
begin
IdTCPClient1.Host := Edit1.Text;
IdTCPClient1.Connect;
try
SetLength(lData, 125000);
for lIndex := 1 to 125000 do
lData[lIndex - 1] := Ord('a');
for lIndex := 1 to 100 do
IdTCPClient1.IoHandler.Write(TIdBytes(lData));
finally
IdTCPClient1.Disconnect;
end;
end;
没有任何可重现问题的代码,很难找出问题所在。
本地IP通信非常稳定(所有数据都保留在内存中,在操作系统缓冲区中)-对于现今的硬件/软件来说,20 MB/s的带宽速度微不足道。
我猜测问题出在你的代码上,或者你达到了(多线程?)Delphi的限制,并且在处理数据时产生了混乱。
当然,你尝试禁用防病毒软件的数据包检查了吗?其中一些在检查IP数据包时会严重减缓IP流量(即使不是HTTP),这会导致这种随机的IP流量拥堵。