AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Häufiger Upload in Intervallen - Beste Lösung dafür?
Thema durchsuchen
Ansicht
Themen-Optionen

Häufiger Upload in Intervallen - Beste Lösung dafür?

Offene Frage von "Svenkan"
Ein Thema von Svenkan · begonnen am 7. Jul 2008 · letzter Beitrag vom 7. Jul 2008
Antwort Antwort
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#1

Re: Häufiger Upload in Intervallen - Beste Lösung dafür?

  Alt 7. Jul 2008, 17:54
Hi,

Zitat von Svenkan:
Socket-Fehler # 10054
Die Verbindung wurde von Peer zurückgesetzt.
Gut. Wir nehmen mal an, der Socket wurde von der Serverseite getrennt. Dies bedeutet z.B. ein Connection-Timeout wegen zu langer Inaktivität.

Du solltest Indy mal auf einen aktuelleren Stand bringen, 9 ist schon arg alt. Die neueren, z.B. 10.2.3 haben hier viele Designverbesserungen und Bugfixes.

Das Problem ist aber grundsätzlich, daß hier eine Verbindung nach dem Socket-Fehler #10054 nicht mehr hergestellt werden kann.

Zitat von Svenkan:
Dein Lösungsvorschlag ist gerade völlig neu für mich, klingt aber vielversprechend. Könntest du mir dazu genaueres sagen?
Na klar, wobei Grundlagenwissen über Timer, Threads und Events nötig ist.

Der Ablauf ist grob z.B. folgender:
- TTimer auf dem Form (Intervall z.B. auf 5000 msec, aktiviert)
- Timer prüft, ob er gerade ausgeführt wird, um Mehrfachausführung zu verhindern
- Timer prüft, ob ein Verbindungsversuch mit den Zugangsdaten zu diesem Server gerade läuft (z.B. per Hash der Daten und einer TObjectList), damit er den Server nicht unnötig mehrfach "belästigt" - dies führt ja auch manchmal zu Firewall Rejects
- Timer erzeugt dann ggf. ein ThreadJob für einen WorkerThread (such mal hier im Forum, da gibt es eine einfache Komponente und Beispiele für, heißt csWorkerThread). Aber bitte nicht 500 Threads gleichzeitig
- Im Workerthread erzeugst Du ein lokales Threadobjekt von TIdFTP, TIdHTTP, TIdSSLOpenSSLSocketHandler oder watt-auch-immer
- Der Thread gibt über synchronized Callbacks (bzw. bei csWorkerThread mit OnThreadException und OnThreadFinished meine ich) seine Results zurück an irgendeinen Callbackhandler bzw. Methodenprozedur

Das ganze programmiertechnisch umzusetzen ist relativ einfach - aber tricky. Du mußt schon die Thematik verstanden haben.

In einfachen Worten: Du erzeugst lokale Indy-Objektinstanzen pro Thread und gibst diese am Threadende frei. So hast Du immer saubere, jungfräuliche Objektinstanzen.

Das erhöht die Stabilität schon ungemein.

Gruß Assertor
Frederik
  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 18:18 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