Brauche Patcher / Updater Funktionen

10/03/2013 20:06 Skill2exeDE#1
Hi Leute,
Ich arbeite seit letztens an einem Updater, der etwas professioneller ist, als die ganze kacke die auf YouTube und sonstiges läuft. Ich will einen Patcher machen, der einen Game Clienten (ca. 1.4 GB) herunterladen soll. Es klappt inzwischen schon, aber das Problem ist, wenn ich eine neue Datei auf den Server packe, dann lädt der Patcher die eine Datei nicht herunter. Ich hab es Versucht, dass der Patcher die Byte-Größe der Datei einzeln überprüft, aber wenn eine Datei 50MB speicher verbraucht, dauert es ziemlich lange, bis er sie berechnet hat. Ich hab auch versucht per Änderungsdatum der Datei abzurufen, aber das geht nur auf FTP-Servern. Hat jemand vllt die gleiche Erfahrung gemacht, und kann mit hier jmd pls helfen ?
10/03/2013 21:24 ωօղძεɾlმղძ#2
Aha sehr interessant einen "professionellen" updater erstellen wollen aber sich nicht mit den basics auskennen das ist doch schon mal extreme pro :faceplam:
10/03/2013 21:27 tolio#3
bietet sich an: Hashfunktion ? Wikipedia
10/04/2013 09:41 Skill2exeDE#4
Ich weiß schon wie man einen patcher prigrammiert, das problem ist, dass der updater bei so einem clienten ca. 20 minuten braucht, um alle files zu überprüfen, und weiß jemand von euch wie man es machen könnte, dass er schneller die files nachprüft?
10/04/2013 10:39 YatoDev#5
Quote:
Originally Posted by Skill2exeDE View Post
Ich weiß schon wie man einen patcher prigrammiert, das problem ist, dass der updater bei so einem clienten ca. 20 minuten braucht, um alle files zu überprüfen, und weiß jemand von euch wie man es machen könnte, dass er schneller die files nachprüft?
indem man das vernünftig programmiert ?
Hashtabelle aufm server und die mit den hashs vom lokalen clienten vergleichen dauert nicht lange ^^
10/04/2013 11:10 MaBarker#6
Wie gesagt Code es Vernünftig.

*hust* *hust* Lern die Basics !!
10/04/2013 12:30 Skill2exeDE#7
Und welches Hashes empfehlt ihr? oder ist es egal, welcher hash?
10/04/2013 13:18 Synatex#8
Die wohl momentan meist genutzten sind SHA1 oder MD5 ;)
10/04/2013 13:31 Skill2exeDE#9
ok thx :)
10/06/2013 21:50 IchVerabschiedeMich#10
CRC32 hat meines Wissens nach eine recht Kurze Berechnungs-Dauer gegenüber der anderen.
10/08/2013 13:20 jacky919#11
Quote:
Originally Posted by Padrio View Post
CRC32 hat meines Wissens nach eine recht Kurze Berechnungs-Dauer gegenüber der anderen.
Es kann aber auch leicht zu Kollisionen kommen, da der Hashwert eben nur 32bit groß ist, darum wären andere Methoden wohl besser.
10/08/2013 13:35 Shawak#12
Filename + Hash(+Size?+Date?) wird wohl kaum zu Kollisionen kommen
10/08/2013 13:45 tolio#13
1. antwort:
[Only registered and activated users can see links. Click Here To Register...]

bei so wenig daten ist eine kollision quasi ausgeschlossen, zusammen mit anderen faktoren die Shawak ja schon genannt hat wirklich unmöglich
10/09/2013 19:31 MrSm!th#14
Quote:
Originally Posted by jacky919 View Post
Es kann aber auch leicht zu Kollisionen kommen, da der Hashwert eben nur 32bit groß ist, darum wären andere Methoden wohl besser.
Nicht zu vergessen, dass es eine Checksum ist, die leicht gezielt manipuliert werden kann.
Sha1 und Md5 sind schon ziemlich performant, das wird in keinem Patcher das Bottleneck sein.
Quote:
Originally Posted by Shawak View Post
Filename + Hash(+Size?+Date?) wird wohl kaum zu Kollisionen kommen
Es hat nichts damit zu tun, was du rein schmeißt. Wenn das Ergebnis eine kleine Größe hat, können entsprechend schnell Kollisionen der theoretisch unendlich vielen Inputs auftreten.
Mit 16 Bytes kannst du nunmal theoretisch mehr Dateien eindeutig darstellen als mit 4.
Dazu kommt die genannte einfache, nicht kryptographische Berechnungsart.
10/09/2013 20:02 IchVerabschiedeMich#15
Ich hab noch eine Idee einzubringen welche damals für bei mir eingebracht wurde:
Prüfen ob neue Version da ist und normal Patchen, danach wie gewohnt Client starten lassen.
Im Hintergrund läuft aber noch der MD5 Check, sollte es da zu Komplikationen kommen bspw. wenn ein Hash nicht stimmt einfach den Client schließen.