![]() |
Häufiger Upload in Intervallen - Beste Lösung dafür?
Ich möchte meine Upload-Prozedur ändern. Momentan ist es so, dass ich bei jedem Upload extra eine Verbindung zum Server aufbaue etc. Falls ein User z.B. alle 5min die Pläne aktualisieren lässt, meldet sich der Server irgendwann zu Wort und lehnt jede weitere Verbindung vorerst ab. Und das ist natürlich sehr hinderlich und auch ärgerlich.
Nun habe ich mir gedacht, dass ich beim Programmstart zunächst eine Verbindung zum Server aufbauen lasse, die dann über die Laufzeit hin besteht. Problem: Es müssen 3 verschiedene Ordner im 'Ernstfall' angesprochen werden, was heißt, dass ich 3 Verbindungen gleichzeitig geöffnet haben muss. Allerdings ist es momentan das, was mir ansonsten als Alternative einfallen würde. Hättet ihr noch weitere Vorschläge, wie man das lösen könnte? Hinweise zu den Uploads - Schüler-, Lehrer- und Monitorvertretungspläne können automatisch auf den jeweils eingestellten Server hochgeladen werden - Die Schüler-/Lehrervertretungspläne kommen auf einen Server, können aber in verschiedene Ordner geladen werden; Der Monitorplan kann auf einen seperaten Server hochgeladen werden, muss aber nicht! |
Re: Häufiger Upload in Intervallen - Beste Lösung dafür?
was für verbindungen hast du denn im moment? ftp?
|
Re: Häufiger Upload in Intervallen - Beste Lösung dafür?
Ich habe momentan 6 verschiedene FTP-Verbindungen. Diese habe ich vor einem Jahr am Anfang des Projekts zur besseren Übersicht eingebaut, heute wären längst nicht mehr alle von nöten. *g*
Ich benutze IdFTP. |
Re: Häufiger Upload in Intervallen - Beste Lösung dafür?
Hi Svenkan,
bist Du denn sicher, daß der Server die Verbindung ablehnt? Hast Du eine aussagekräftige Fehlermeldung? Wie erzeugst Du die Verbindungen: Erzeugst Du diese per Code oder Component? Werden diese bei Programmstart angelegt und wiederverwendet? Welche Indy Version 9, 10.1.1, 10.2.3, SVN? :glaskugel: Beispiel: Ich verwende TLSv1 Tunnel per IdFTP mit dem aktuellen Indy SVN Branch. Anzahl gleichzeitiger Verbindungen: je nach Bedarf, meistens 5-10. Alle werden per Timer getriggert und in einem Workerthread erzeugt, übertragen und dann vernichtet. Und das alle 5 Sekunden... Bisher hat sich da kein Server beschwert. Mache Server haben Probleme, wenn zu viele Connections gleichzeitig vom selben und/oder verschiedenen Endpunkten kommen. Ist das ein "Selfmade"-Server oder von einem Hosting-Provider? Gruß Assertor |
Re: Häufiger Upload in Intervallen - Beste Lösung dafür?
Zitat:
Die Verbindung wurde von Peer zurückgesetzt. Zitat:
Delphi-Quellcode:
Verschieden. Manche sind schuleigene Server, manche sind NiBiS (Niedersächsische Bildungsserver).
Mache Server haben Probleme, wenn zu viele Connections gleichzeitig vom selben und/oder verschiedenen Endpunkten kommen. Ist das ein "Selfmade"-Server oder von einem Hosting-Provider?
Dein Lösungsvorschlag ist gerade völlig neu für mich, klingt aber vielversprechend. Könntest du mir dazu genaueres sagen? |
Re: Häufiger Upload in Intervallen - Beste Lösung dafür?
Hi,
Zitat:
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:
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:26 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