AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke TIdTCPServer & TIdTCPClient - Verschiedene Fragen
Thema durchsuchen
Ansicht
Themen-Optionen

TIdTCPServer & TIdTCPClient - Verschiedene Fragen

Ein Thema von RWarnecke · begonnen am 20. Aug 2010 · letzter Beitrag vom 18. Nov 2021
Antwort Antwort
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#1

AW: TIdTCPServer & TIdTCPClient - Verschiedene Fragen

  Alt 23. Aug 2010, 09:40
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
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: TIdTCPServer & TIdTCPClient - Verschiedene Fragen

  Alt 23. Aug 2010, 10:21
Würde mich freuen, wenn Ihr diesen Test mal bei euch ausführt und die Ergebnisse Postet.
Windows 7 32Bit
AMD Phenom II X4 @ 3000
4GB Arbeitsspeicher
RAD Studio 2007 Prof.

Verbindungen 1995 (im Schnitt +/-2)
ClientVersion 10.1.5
ServerVersion 10.1.5

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: TIdTCPServer & TIdTCPClient - Verschiedene Fragen

  Alt 23. Aug 2010, 14:50
Hi,

bei meiner Config auf meiner Workstation im Office :

Windows Vista Business(32 Bit)
Intel Core Duo CPU 8400 2 x 3.0 GHz
4 GB Ram

Verbindungen: 1989
EIdSocketError::Socket Error # 10061 Connection refused.
Client Version: 10.1.5
Server Version: 10.1.5

Speicherauslastung dabei 41,9 MB.

Werde das heute Abend nochmal auf einem richtigen Windows Server System testen,
ich denke nämlich es wird hier irgenteine Workstation beschränkung zuschlagen.

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#4

AW: TIdTCPServer & TIdTCPClient - Verschiedene Fragen

  Alt 23. Aug 2010, 14:58
1)
Windows XP Professional (32Bit)
Intel Core2Duo E6600
2 GB RAM

Zitat:
1994
EIDsocketError::Socket Error # 10061 Connection refused


2)
Windows Server 2003 Web Edition (32Bit)
Intel Core2Duo E6600
2 GB RAM

Zitat:
3969
EIDCouldNotBindSocket::Could not bind socket. Address and port are already in use.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#5

AW: TIdTCPServer & TIdTCPClient - Verschiedene Fragen

  Alt 23. Aug 2010, 20:07
Hallo zusammen,

wow, soviele Informationen. Da muss ich mich erstmal durchwurschteln. Aber ich danke schon mal allen im voraus für Ihre Antworten.

Bei meinem Rechner mit Windows 7 64Bit 8GB RAM gab es 1578 Verbindungen.

Bei meinem Server 2008 32Bit 1GB RAM gab es zwischen 1999 und 2020 Verbindungen. Beim 2. Server 2008 32Bit mit 2GB RAM um die 2000 Verbindungen +/- 5 Verbindungen.

Bei dem kleinen Testprogramm von Win32.API habe ich ja die obenstehenden Ergebnisse. Heißt das also, ich kann wie in meinem Beispiel 2000 gleichzeitige Verbindungen zu meinem Server haben ?
Rolf Warnecke
App4Mission

Geändert von RWarnecke (23. Aug 2010 um 20:09 Uhr)
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#6

AW: TIdTCPServer & TIdTCPClient - Verschiedene Fragen

  Alt 23. Aug 2010, 20:58
Ja, die 2000 Verbindungen sind auf jeden Fall möglich, vielleicht auch mehr. Es könnte auch gut seinen, dass Windows in diesem Fall limitiert, da alle Connects von der selben IP kommen.

Ich habe es gerade nochmal auf einen Windows XP getestete, hier ist nach ca. 2000 Connects Schluss (Indy 10.5.7). Es scheint also allein am OS zu liegen und eine "Limitierung" im TCP/IP-Stack zu seinen.

--Win32
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
440 Beiträge
 
#7

AW: TIdTCPServer & TIdTCPClient - Verschiedene Fragen

  Alt 23. Aug 2010, 21:21
Die maximale Threadanzahl (pro Prozess) ist nicht vom physikalischen Speicher abhängig sondern vom virtuellen Adressraum. Ein Thread belegt den Speichern nicht wirklich, sondern er belegt nur den Adressraum. Erst wenn der Stack tatsächlich benutzt wird, wird physikalischer Speicher verwendet. Siehe dazu auch:

http://msdn.microsoft.com/en-us/libr...74(VS.85).aspx
http://blogs.technet.com/b/markrussi...8/3261309.aspx

Ich habe beim Linker die Max. Stackgröße gegenüber dem Standardwert halbiert ($80000) und bekomme dann mit dem Testprogramm von Win32 doppelt soviele Verbindungen (rund 4000).
Wenn ich die Max Stackgröße auf 65536 heruntersetzt, steigt die Anzahl der Verbindungen unter XP nicht weiter an, weil XP anscheinend nur die Ports 1025..5000 (=>3976 mögliche Verbindungen) belegt. Bei W7-64 werden nach meinen aktuellen Untersuchungen die Ports 49155..65535 belegt. Hier bekomme ich dann 6019 gleichzeitige Verbindungen.
D.h. abweichend von meiner ersten Antwort, ist mein jetziger Kenntnisstand: Die maximale Anzahl der gleichzeitigen Serververbindungen ist durch die maximale Anzahl der gleichzeitigen Threads und die Anzahl der belegbaren Ports begrenzt.

Geändert von samso (24. Aug 2010 um 09:41 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz