Dateien Aktualisieren

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Dateien Aktualisieren

    Hallo zusammen,

    ich denke mal das dieses Thema schon duzende male behandelt wurde doch leider finde ich nichts passendes für meine Bedürfnisse...
    Zu meinem Problem:

    Ich möchte Dateien von einem Server via https mit dem User synchronisieren.
    Das heißt wenn ich das Programm öffne und auf "Aktualisierungen Suchen" klicke, mein Lokal angegebenes Verzeichnis gescannt werden soll und dann verglichen werden soll mit dem Webserver.
    Sollten unterscheide existieren sollen diese ausgeglichen werden so das beide Verzeichnisse immer absolut gleich sind.
    Das funktionier bei mir soweit auch ganz gut benötigt aber teilweise über 18 Minuten um alleine die lokalen Dateien einzulesen was absolut nicht geht...
    Momentan lese ich Lokal die Unterverzeichnisse aus und überprüfe jeden einzelnen SHA256 Wert.
    Dann gleiche ich die SHA256 werte mit einer Liste auf dem Server ab die per Hand generiert werden muss :/
    Nach dem vergleich der beiden Listen weiß ich welche Dateien sich unterscheiden und downloade diese via webClient vom Server.

    Leider bekomme ich es nicht hin das auf dem Webserver entfernte Dateien auch lokal entfernt werden, so wie ich der Meinung bin (da es sich um einen Client für meine Gaming Community handelt) das eine Zeit von
    18 Minuten für das einlesen der Dateien einfach zu lange dauert.
    Das ganze läuft bereits in eigenen Threads so das der Client weiter genutzt werden kann dennoch ist die Wartezeit gerade für kleine Updates von ca 30Mb einfach zu groß.
    Zumal dann ja immer noch der Download anfällt...

    Gescannt werden im durchschnitt 700 Dateien mal mehr mal weniger je nach Update Stand (falls das wichtig ist.)

    Lieber währe mir eine Methode wie z.B. zsync bzw. rsync das machen.
    Jedoch möchte ich dies vollkommen in meine Oberfläche integrieren was leider mit diesen beiden nicht funktionier. (oder ich kann es einfach nicht xD)
    Hat vielleicht jemand von euch eine Idee wie ich das beschleunigen kann so das dies in einigen Sekunden geschieht?
    Ich weiß das es möglich ist da für andere Spiele Programme existieren die dies sehr schnell hinbekommen beispielsweise Arma3Sync für Arma 3 (wie der Name vermuten lässt :P)

    Vielleicht könnt ihr mir helfen.

    Mit Freundlichem Gruß
    Panics
    Nur mal am Rande.
    Was spricht dagegen, ein Update-Paket zu erstellen ( Zip ), seinen Hash zu berechnen und nur eben EINE Datei zu parallelisieren, diese dann, falls nötig runterzuladen und sie zu entzippen.
    Und Gott alleine weiß alles am allerbesten und besser.
    Dann bastel Dir eine gescheite Administration, die das automatisch erkennt und redundante Dateien nicht hinzufügt. Das nennt sich BTW auch Differentialupdate bzw. Delta Patching (wenn nur die entsprechenden Inhalte ersetzt werden).
    Wichtig auch: Updater - Warum sollte man eigene Updater vermeiden?
    Du musst die Dateien auch noch signieren und wenn Du das dann mit vielen Dateien machst, wird Deine Konfigurationsdatei riesig groß. Folge: Du verbrauchst weitaus mehr Speicher allein mit den Signaturdaten. Daher ist ein einheitliches Updatepaket sinnvoll, das alles enthält.
    nUpdate kann im Moment noch keine Differentialupdates (da arbeite ich noch dran), aber Squirrel hat die Funktion afaik.

    Nicht mehr gebrauchte Dateien lassen sich über speziell implementierte Aktionen/Operationen löschen, die man beim Paket mit angibt.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Nein, so meine ich das nicht.
    Die Zip umfasst nur die Dateien, die auch geupdated werden müssen.

    Anbei kannst du noch eine Ini Datei zippen, die protokolliert, welche Dateien redundant sind, sodass sie gelöscht werden können.
    Und Gott alleine weiß alles am allerbesten und besser.
    Bin ich nicht so der Fan von da ich dem User gerne zeigen möchte was ganz genau gerade vor sich geht :/
    Zumal ich teilweise bei Updates auch hergehe und nur Daten lösche was dann wiederum dennoch einen Download bedeuten würde...

    Ich würde lieber die Dateien einzeln updaten so wie bisher nur das der Vorgang möglichst viel beschleunigt wird :/
    Gibt es nicht eine Methode beispielsweise ZSync zu integrieren so das ich dieses nutzen könnte oder vielleicht eine Klasse die ich verwenden kann um solche
    Updates zu realisieren?
    Wieso alle Dateien jedes Mal neu analysieren nur um am Ende eine Datei runterzuladen?

    Willst du etwa vorbeugen, dass Dateien manipuliert werden?
    Und wieso SHA256?!
    MD5 reicht hier völlig aus.
    Und Gott alleine weiß alles am allerbesten und besser.

    Panics schrieb:

    Zumal ich teilweise bei Updates auch hergehe und nur Daten lösche was dann wiederum dennoch einen Download bedeuten würde...
    Nö, wieso? Du kannst das ja dann anders implementieren.

    Panics schrieb:

    da ich dem User gerne zeigen möchte was ganz genau gerade vor sich geht
    'Nen Progress ist leicht gemacht und wenn Du dem User zeigst, was für Dateien gerade installiert werden, reicht das vollkommen aus.

    Du kannst das gerne einzeln updaten, hast aber dann, wie gesagt, 'ne große Menge an Daten, die Speicher frisst und umständlicher ist es auch. Es ist viel einfacher, ein zentrales Paket zu haben, das zu signieren und somit auch Konflikte zu vermeiden. Und wie gesagt, schau Dir halt mal Squirrel an.
    Und schau Dir das mit dem Signieren bitte an!

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade Ich muss leider sagen ich habe deinen Beitrag eben komplett übersehen und entschuldige mich dafür :/
    @φConst Du hast recht MD5 würde reichen.

    φConst schrieb:

    Willst du etwa vorbeugen, dass Dateien manipuliert werden?



    Richtig ich möchte vorbeugen das ein User in irgend einer Form Dateien manipulieren kann.
    Dies liegt nicht zuletzt daran das diese Files genutzt werden können um "Hacks" oder "Cheats" zu injecten.

    Trade schrieb:

    Und schau Dir das mit dem Signieren bitte an!


    Das mache ich nun so wie ich auch schauen werde und auch Squirrel werde ich mir anschauen.
    Ja , dann ahnde es doch.. gib eine MessageBox aus und warne, dass bei nächsten Mal die Ip gesperrt wird.
    Ein Strafsystem und Strafmaß ist ja bereits implementiert : 18 Minuten warten.

    @Trade Witzig, wir antworten beinahe immer zeitgleich.
    8o
    Und Gott alleine weiß alles am allerbesten und besser.
    Achso. :D Ist nur durch die Form des Posts nicht aufgefallen, weil sich die Beiträge von PhiConst und mir inhaltlich mehr oder weniger gedeckt haben.^^
    Jo, Squirrel sollte da ein recht gutes Framework sein, was diese Funktionalität besitzt. Somit solltest Du das mit der Manipulationsprävention auch hinbekommen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: