Со стороны пользователя, локально повторно вычисляя контрольную сумму и сравнивая ее со значениями в онлайн-JSON, я могу проверить, какие файлы отличаются (будь то из-за обновления или вмешательства пользователя), и загрузить только те, которые отличаются.
< предварительно class="lang-json Prettyprint-override">
Код: Выделить всё
"checksums" :
{
"path/file.ext" : "ABCDEFGH",
...
}
Код: Выделить всё
public static async UniTask GetChecksumAsync(string _filePath)
{
byte[] fileBytes = await File.ReadAllBytesAsync(_filePath);
uint crcValue = ComputeChecksum(fileBytes);
return crcValue.ToString("X8");
}
- Прежде чем вычислять контрольные суммы, я сначала сравниваю версии. txt с его онлайн-аналогом. Предполагая, что большинство пользователей не будут трогать файлы игры, этого должно быть достаточно, чтобы знать, есть ли обновление для загрузки или нет. Но даже если и есть, контрольные суммы все равно придется вычислять.
- Вместо того, чтобы читать содержимое файла, я подумал, что можно просто использовать FileInfo , чтобы прочитать дату последнего изменения и объединить ее с размером в байтах, пропуская любую контрольную сумму. Очевидно, что это происходит намного быстрее (с 30 с до 60 мс). К сожалению, когда файл загружается на компьютер пользователя, его дата последнего изменения также обновляется в соответствии с меткой времени загрузки. Кроме того, это не всегда работает должным образом, поскольку эти значения иногда не обновляются операционной системой мгновенно.
- Я использую Azure Blobs как служба хранилища, чтобы я мог читать поля ETag или ContentMD5, которые Azure предоставляет для каждого файла. Тем не менее, мне придется пересчитывать их локально, чтобы сравнить, но это не решает проблему.
Существует ли отраслевой стандарт для обработки обнаружения обновлений? Как бы вы это сделали?
Подробнее здесь: https://stackoverflow.com/questions/793 ... -detection
Мобильная версия