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
Svenkan

Registriert seit: 10. Feb 2007
Ort: Bersenbrück
547 Beiträge
 
Delphi 7 Enterprise
 
#1

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

  Alt 7. Jul 2008, 17:31
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!
Sven Kannenberg
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 7. Jul 2008, 17:50
was für verbindungen hast du denn im moment? ftp?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Svenkan

Registriert seit: 10. Feb 2007
Ort: Bersenbrück
547 Beiträge
 
Delphi 7 Enterprise
 
#3

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

  Alt 7. Jul 2008, 17:56
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.
Sven Kannenberg
  Mit Zitat antworten Zitat
Assertor

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

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

  Alt 7. Jul 2008, 18:26
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?

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
Frederik
  Mit Zitat antworten Zitat
Svenkan

Registriert seit: 10. Feb 2007
Ort: Bersenbrück
547 Beiträge
 
Delphi 7 Enterprise
 
#5

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

  Alt 7. Jul 2008, 18:38
Zitat:
bist Du denn sicher, daß der Server die Verbindung ablehnt? Hast Du eine aussagekräftige Fehlermeldung?
Socket-Fehler # 10054
Die Verbindung wurde von Peer zurückgesetzt.

Zitat:
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? Was sagt die Glaskugel?
Ich erzeuge die Verbindung über die Indy-Komponente TIdFTP (Indy-Version: 9).

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? Verschieden. Manche sind schuleigene Server, manche sind NiBiS (Niedersächsische Bildungsserver).


Dein Lösungsvorschlag ist gerade völlig neu für mich, klingt aber vielversprechend. Könntest du mir dazu genaueres sagen?
Sven Kannenberg
  Mit Zitat antworten Zitat
Assertor

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

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

  Alt 7. Jul 2008, 18: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 21:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz