我有一个使用Indy TIdTCPServer和TIdTCPClient在delphiXe2中编写的客户端/服务器应用程序,它们使用TCP地址127.0.0.1在同一台计算机上相互通信
当我使用大约每秒1兆(8兆位)的数据时,一切正常。
然而,当我以20megs / sec(160兆位)的速度设置我的数据时,它会变慢并开始表现得很奇怪。
这是那种速度的通常行为吗? 此外,我似乎无法找到任何基准或信息,表明2本地应用程序之间的最大数据传输速度。
此致
答案 0 :(得分:4)
执行带宽测试。这就是我使用的(我附加了相关的服务器和客户端代码)。 FWIW,我最多可以达到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;
答案 1 :(得分:2)
如果你(ab)使用TCP / IP作为在同一台机器上运行的进程之间进行IPC的方法,那么你将遇到这样的限制。通过使用TCP / IP,尤其是本地连接,所有数据都被分段并推送通过TCP的分组交换系统。如果是这种情况,你应该研究其中一个:
答案 2 :(得分:0)
没有任何代码可以重现问题,很难找到问题所在。
IP通信在本地非常稳定(所有数据都保留在内存中,在OS缓冲区中) - 对于现在的HW / SW,20 MB / s并不是带宽速度。
我想问题出在您的代码中,或者您达到了Delphi的(多线程?)限制,并且在处理数据时出现了挫折。
当然,您是否尝试禁用AntiVirus数据包检查?其中一些在检查IP数据包时会大大减慢IP流量(即使它不是HTTP),并且会导致这种随机的IP流量堵塞。