Quote:
Hoihoi :)
Also ich habe damals Tests mit einem 2012 DE Client und einem 2012 P-Server Client durchgeführt, und jeweils den einen mit dem anderen überpatcht. Da sind wie gesagt diese 90% Zeitersparnis zusammengekommen.
Aber selbst wenn die Sache mit dem Verschlüsseln bei neueren Clients so ist, dank der Eventbasierten Programmierung des Patchers hat man genügend Optionen um den Patchvorgang zu optimieren.
Eine Lösung des Problems wäre, wenn man als Admin einen Diff-Patch der nicht verschlüsselten Datei erstellt. Der Patcher zieht sich dann den Diff-Patch und entschlüsselt die lokale Datei bevor dieser angewandt wird und verschlüsselt sie wieder nachdem er angewandt wurde. Das Funktioniert natürlich nur, wenn man die benötigte Ver und Entschlüsselungsroutine hat. (Egal in welcher Sprache, vorzugsweise C++ da man C# dekompilieren kann. Man kann nämlich in C# alles aufrufen, solange man eine geeignete API hat.)
Lg. Sora
Ich weiss zwar nicht, wie du deine Diff-Dateien aufgebaut hast, aber gehen wir einfach mal davon aus, dass du Position und neuen Wert jeweils Hexadezimal in einer einfachen UTF-8 Textdatei speicherst.
In diesem Fall benötigt die 1.000.000ste Position (F4240 - 5 Zeichen) 5 Byte Speicher, folgend von einem Trennzeichen (1 Byte) und dem neuen Byte Wert zu der Position (bis zu 3 Zeichen / 3 Byte). Hinzu kommt ein Newline, welches 2 Byte Speicher benötigt.
So der Aufbau einer simplen Diff-File.
Zusammengefasst brauchst du für diesen einen geänderten Byte in deiner Diff-File 11 Byte Speicher, welche ja auch durch die Weiten des Internets vom Patchserver auf den Client wandern müssen.
Vorausgesetzt es ändert sich in einem Patch nur ein einziges Byte in der Datei (was natürlich nie der Fall sein wird), muss man natürlich nur 11 Byte statt die ganze Datei übertragen, allerdings werden sich in der Praxis wohl eher 50% aller Bytes ändern (was lange nicht heisst, dass in diesem Patch die Hälfte geändert wurde) oder bei einem verschlüsseltem Client sogar ~99%.
Die Frage, ob das Übertragen einer Diff-File in diesem Fall schneller gehen würde, als die komplette Datei zu übertragen, brauchen wir uns hier sicherlich nicht mehr stellen.
Kannst du uns evtl. mal zeigen, wie du deine Diff-Files aufgebaut hast? Ich habe mich auch schon daran versucht, eine möglichst Speichersparende Diff-File im Byte- statt Textformat zu erstellen, allerdings habe ich bisher keine Möglichkeit gefunden, genug Speicher zu sparen, um ein Diff-Patching sinnvoll zu machen.