crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Теория, как сократить объём трафика по сети, Что-то вроде дельта кодирования..
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  


Эм, спс, почитал...

Правда всё равно не понял как применить эти знания к конкретному случаю..

Я просто лишь хочу убедиться что данным примером можно складывать любые массивы данных, и это не вызовет переполнения буфера.

Насколько я понял из опытов:
qDebug() << (int)(char) 0xff + 0x02;

Выдаёт 1. Т.е после FF, байт как бы перезаписывается при переполнении.

qDebug() << (int) (char) 257;

Тут тоже. Число, большее максимального значения байта, спокойно конвентируется и программа выдаёт 1.



Так вот, если всё это работает. То возникает вопрос, если этот код:
void delta_encode(char *bp, size_t n)
{
        char last = 0, tmp;
        int i;

        for (i = 0; i < n; ++i) {
                tmp = bp[i];
                bp[i] -= last;
                last = tmp;
        }
}


Модифицировать таким способом, чтобы вместо того чтобы текущий с предыдущим символом в одном массиве вычитать.
Он бы сравнивал 2 массива и разность (delta) записывал в третий.

Что бы по сети можно было передать лишь дельту, которая будет состоять почти полностью из нулей и легко сожмётся через qCompress().



Так вот.. Почему нигде об этом в инете не написано?? Вроде идея простая... Вместо этого есть достаточно сложные программы типа xdelda, diff...


И ещё вопрос, разве нету в C++ или Qt специальных методов чтобы сделать это проще? Не прибегая к перебору байт...

Сообщение отредактировал 512es - 17.1.2012, 22:10
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- 512es   Теория, как сократить объём трафика по сети   17.1.2012, 18:28
- - 512es   Ковыряю пример с википедии по дельта-кодированию. ...   17.1.2012, 20:49
- - BRE   Вот это почитай: http://ru.wikipedia.org/wiki/Цело...   17.1.2012, 21:25
- - 512es   Эм, спс, почитал... Правда всё равно не понял как...   17.1.2012, 22:09
- - 512es   Тыкс.. Отвечаю сам себе. В задуманном мною аглори...   17.1.2012, 22:56
|- - Iron Bug   Цитата(512es @ 18.1.2012, 1:56) Но новый ...   17.1.2012, 23:32
- - 512es   Iron Bug, Но сделали же! А вообще, по теме: ...   17.1.2012, 23:54
|- - Iron Bug   Цитата(512es @ 18.1.2012, 2:54) Iron Bug,...   18.1.2012, 17:54
- - Алексей1153   незначительное изменение данных влияет на размер д...   18.1.2012, 7:32
- - 512es   Размер динамический. Вообщем утилита bsdiff просто...   18.1.2012, 17:37
- - Алексей1153   Iron Bug, и в GIF похоже делается. 512es, алгорит...   19.1.2012, 6:40
|- - Iron Bug   Цитата(Алексей1153 @ 19.1.2012, 9:40) При...   23.1.2012, 23:29
- - zloiia   Быть может немного не в тему, но может не стоит из...   19.1.2012, 7:04
- - Алексей1153   zloiia, всё зависит от критичности времени обработ...   19.1.2012, 7:33
- - 512es   Алексей1153, скорость да, уступает простому вычита...   20.1.2012, 11:13
- - Алексей1153   Цитата(512es @ 20.1.2012, 14:13) когда ок...   20.1.2012, 13:01
- - 512es   Алексей1153, кстати, а что вас заставило изобретат...   23.1.2012, 19:48
- - Алексей1153   512es, задача была - написать систему удалённого а...   23.1.2012, 19:58
- - Алексей1153   Цитата(Iron Bug @ 24.1.2012, 2:29) никако...   24.1.2012, 21:05
- - Iron Bug   Цитата(Алексей1153 @ 25.1.2012, 0:05) не ...   25.1.2012, 6:39
- - lanz   http://fabiensanglard.net/quake3/network.php Вооб...   20.2.2013, 16:59


Ответить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 10:40