Теория, как сократить объём трафика по сети, Что-то вроде дельта кодирования.. |
Здравствуйте, гость ( Вход | Регистрация )
Теория, как сократить объём трафика по сети, Что-то вроде дельта кодирования.. |
512es |
17.1.2012, 18:28
Сообщение
#1
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Доброго времени суток!
Упрошённая схема: Имеется 2 компьютера, клиент и сервер. Клиент достаточно часто запрашивает одни и те же данные (QByteArray) у сервера. Объём данных будем считать относительно большим. Иногда данные могут незначительно меняться. Задача: Максимально сократить объём трафика между клиентом и сервером. Возможно запоминание последних отданных данных клиенту на стороне сервера и последних принятых данных клиентом на стороне клиента. Сейчас используется qCompress. Заметный выигрыш в размере пакетов, но всё равно, теоретически, можно посылать только различия между новым и предыдущим QByteArray + хеш, указывающий на то, какие данные были использованы при сравнении (на всякий случай, для коррекции ошибок). Смотрю в сторону Delta кодирования. Но помоему это немного не то, или я просто не умею его использовать. Как его адаптировать для сравнения двух массивов данных? |
|
|
512es |
17.1.2012, 22:09
Сообщение
#2
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Эм, спс, почитал...
Правда всё равно не понял как применить эти знания к конкретному случаю.. Я просто лишь хочу убедиться что данным примером можно складывать любые массивы данных, и это не вызовет переполнения буфера. Насколько я понял из опытов:
Выдаёт 1. Т.е после FF, байт как бы перезаписывается при переполнении.
Тут тоже. Число, большее максимального значения байта, спокойно конвентируется и программа выдаёт 1. Так вот, если всё это работает. То возникает вопрос, если этот код:
Модифицировать таким способом, чтобы вместо того чтобы текущий с предыдущим символом в одном массиве вычитать. Он бы сравнивал 2 массива и разность (delta) записывал в третий. Что бы по сети можно было передать лишь дельту, которая будет состоять почти полностью из нулей и легко сожмётся через qCompress(). Так вот.. Почему нигде об этом в инете не написано?? Вроде идея простая... Вместо этого есть достаточно сложные программы типа xdelda, diff... И ещё вопрос, разве нету в C++ или Qt специальных методов чтобы сделать это проще? Не прибегая к перебору байт... Сообщение отредактировал 512es - 17.1.2012, 22:10 |
|
|
Текстовая версия | Сейчас: 28.11.2024, 10:40 |