Die Threadanzahl wird durch den Speicher begrenzt. Da pro Thread mind 1MB Speicher angefordert wird, ist also spätestens bei 2048 Clients Schluss. Ich habe nicht untersucht, ob durch Änderung von Parametern die Größe des angeforderten Speichers geändert werden kann.
Die von
Indy erstellten Threads haben keine 1MB StackSize, deshalb ist der Speicher hier nicht limitierend (1500 Threads vs ~80MB).
Hier mal ein Beispiel:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
Windows, Sysutils, IdBaseComponent, IdComponent, IdCustomTCPServer, IdTCPServer,
IdContext, IdTCPConnection, IdTCPClient;
type
TTestServer =
class(TIdTCPServer)
private
procedure MyOnExecute(AContext: TIdContext);
public
constructor Create;
end;
{ TTestServer }
constructor TTestServer.Create;
begin
inherited Create(
nil);
with (Bindings.Add)
do
Port := 5000;
OnExecute := MyOnExecute;
Active := True;
end;
procedure TTestServer.MyOnExecute(AContext: TIdContext);
begin
Sleep(1000);
end;
var
Server: TTestServer;
Client: TIDTCPClient;
i: Integer;
begin
Server := TTestServer.Create();
try
for i := 1
to 10000
do
begin
Client := TIdTCPClient.Create(
nil);
Client.Connect('
localhost', 5000);
writeln(i);
end;
except
on e:
Exception do
writeln(Format('
%s::%s', [E.ClassName, E.
Message]));
end;
writeln('
Client Version: ', Client.Version);
writeln('
Server Version: ', Server.Version);
readln;
end.
Auf diesem Rechner hier (Win7 64bit, Dualcore, 4GB
RAM) ist nach 1546 Connects Schluss (Connection refued #10061). Würde mich freuen, wenn Ihr diesen Test mal bei euch ausführt und die Ergebnisse Postet. (
Achtung: Bitte nicht mit Debugger ausführen, da Delphi sonst streikt!)
Connects: 1546
Client/Server Version: 10.5.5
In diesem Fall scheint Windows zu limitieren, wahrscheinlich die Max Anzahl von
TCP-Connections.
-
Win32