Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#10

AW: Stabilität einer INDY 10 Anwendung

  Alt 21. Jan 2013, 11:42

Indy benutzt blockierende Sockets.

Ich habe festgestellt, dass in einem Programm mit vielen Verbindungen (zur exakt gleichen Zeit) dies zwangsläufig zu Problemen führt. Entweder musst du dies komplett Kontrolliert ausführen (mit maximal einer Verbindung zur gleichen Zeit) oder du benutzt ICS, welche nicht blockierend arbeitet.

Diese Erfahrung habe ich jedenfalls gemacht :/
Konkurrierender Zugriff auf einen Socket kann nur in einer Multithreading Anwendung gut gehen.

Es liegt nicht am blockierenden Zugriff, falls Indy bei vielen Verbindungen "Probleme" macht, sondern meist an Fehlern im Code, vor allem bei der Kommunikation mit dem Hauptthread der VCL geschieht das gern.

Auch das Betriebssystem spielt eine Rolle, zum Beispiel wenn die Socket-Verbindungen nicht wiederverwendet werden, sondern der Client immer wieder neue Sockets öffnet und schliesst. Die geschlossenen Sockets bleiben dann für einige Zeit in Warteposition (Status TIME_WAIT), und das System wird sehr schnell überlastet. Das kann man mit netstat oder TCPView leicht nachvollziehen.

Jede Indy Client Komponente baut ihre eigene TCP Verbindung über einen eigenen Socket auf. Bei einem Indy Server gibt es für jede Verbindung einen separaten Thread, und jeder Socket wird immer nur von einem Thread bedient.
Michael Justin

Geändert von mjustin (21. Jan 2013 um 12:04 Uhr)
  Mit Zitat antworten Zitat