Russian Qt Forum
Ноябрь 23, 2024, 11:43
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
Потоковый бинарный JSON (с зжатием)
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Потоковый бинарный JSON (с зжатием) (Прочитано 8194 раз)
Fregloin
Супер
Offline
Сообщений: 1025
Потоковый бинарный JSON (с зжатием)
«
:
Сентябрь 30, 2013, 11:18 »
Привет. Есть клиент и сервер. Клиент периодически (несколько раз в секунду) запрашивает данные у сервера. Обен производится в текстовом виде сейчас.
Траффик переменный, обычно сервер шлет данные об изменениях состояний объектов, и размер JSONа составляет несколько килобайт. Периодически (раз в минуту) сервер шлет все состояния объектов, размер уже порядка 700Кб текста. К серверу таких клиентов может подключаться довольно много, до десятка, иногда больше. Возникает задача передавать эти данные в бинарном виде
и вероятно всего следует использовать какое то сжатие, т.к. данные теоретиски должны ужиматься хорошо. Вопрос, как это реализовать? Т.е. механизм запрос-ответ с асинхронным посылками команд на сервер и асинхроным ответом на команду, данные о состояниях преедаются постоянно.
Читал про BSJON но не смог найти его реализацию на С++.
Записан
LisandreL
Птица говорун
Offline
Сообщений: 984
Надо улыбаться
Re: Потоковый бинарный JSON (с зжатием)
«
Ответ #1 :
Октябрь 01, 2013, 13:55 »
Ну самый простой вариант, требующий минимум изменений - имеющийся протокол сжать универсальными «архиваторами».
zlib, например, (если речь о Qt - можно взять обёртку qConpress/qUncompress) или lzma SDK (не пробовал).
Записан
xokc
Птица говорун
Offline
Сообщений: 976
Re: Потоковый бинарный JSON (с зжатием)
«
Ответ #2 :
Октябрь 04, 2013, 09:45 »
Цитата: Fregloin от Сентябрь 30, 2013, 11:18
Читал про BSJON но не смог найти его реализацию на С++.
Как-то плохо искали
http://kenai.com/projects/mongoviewer/sources/svn/show/bson
https://qt.gitorious.org/qtplayground/qtjsonstream/source/2c7a5a89ce98e682acfe12aacf5b3a833f52f0c9:src/bson
P.S. Сам не пользовался.
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: Потоковый бинарный JSON (с зжатием)
«
Ответ #3 :
Октябрь 12, 2013, 20:41 »
Нашел интересное решение UniversalBSON. Написал реализацию, выходные данные получаются в среднем на 30% меньше что уже хорошо.
Записан
LisandreL
Птица говорун
Offline
Сообщений: 984
Надо улыбаться
Re: Потоковый бинарный JSON (с зжатием)
«
Ответ #4 :
Октябрь 13, 2013, 16:59 »
Попробуйте всё же мой вариант. Дописать буквально пару строк, а текстовые файлы zip жмёт обычно намного лучше, чем на 30%.
Ну хотя если большая часть вашего json'а - неповторяющиеся бинарные данные в каком-нибудь base64, то может 30% и нормальная величина.
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: Потоковый бинарный JSON (с зжатием)
«
Ответ #5 :
Октябрь 17, 2013, 10:06 »
qConpress/qUncompress конечно можно глянуть, но суть в том что сервер написан на голом си без каких либо кутешных примочек, так что возникает вопрос совместимости.
Как вариант нужно искать статьи о потоковых данных, например вещание интернет радио или т.п. Еще есть мысли почитать про промышленные протоколы.
Записан
LisandreL
Птица говорун
Offline
Сообщений: 984
Надо улыбаться
Re: Потоковый бинарный JSON (с зжатием)
«
Ответ #6 :
Октябрь 17, 2013, 10:27 »
Цитата: Fregloin от Октябрь 17, 2013, 10:06
qConpress/qUncompress конечно можно глянуть, но суть в том что сервер написан на голом си без каких либо кутешных примочек, так что возникает вопрос совместимости.
На этот случай я вам предлагал zlib. Как раз таки чистый C.
Из API вам хватит 3 функций:
1) compress или compress2
2) compressBound
3) uncompress
Вот описание:
http://zlib.net/manual.html#Utility
- всего 1 нужный вам раздел.
LZMA SDK
скорее всего даст немного лучшее сжатие (и с C тоже дружит), но API там заметно сложнее, так что советую начать с первого варианта.
«
Последнее редактирование: Октябрь 17, 2013, 14:03 от LisandreL
»
Записан
xokc
Птица говорун
Offline
Сообщений: 976
Re: Потоковый бинарный JSON (с зжатием)
«
Ответ #7 :
Октябрь 18, 2013, 10:33 »
Собственно плюс BSON по сравнению с JSON + сжатие при использовании в сетевых протоколах не только и не столько в его большей компактности, скорее - в возможности обрабатывать элементы документа не дожидаясь загрузки документа целиком. Если топикстартер такой особенностью BSON не пользуется, то подозреваю, что связка JSON + сжатие будет действительно эффективнее. Стоит только помнить, что сжатие тоже "бесплатно" не дается - на него расходуются вычислительные ресурсы сервера. Что же касается C реализаций текстовых компрессоров/декомпресcоров - то их сотни. Я, например, пользовался minilzo
http://www.oberhumer.com/opensource/lzo/#minilzo
[/url] - 3 h файла + 1 c файл с двумя функциями (compress/decompress).
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: Потоковый бинарный JSON (с зжатием)
«
Ответ #8 :
Октябрь 19, 2013, 20:34 »
Тут еще такое дело, что данные нужно зашифровывать при передаче. Вот такое тз. раньше не заморачивались, гоняли тупо текст в локальной сети. теперь нужно шифровать, + сжимать так как данных будет намного больше чем раньше.
Записан
LisandreL
Птица говорун
Offline
Сообщений: 984
Надо улыбаться
Re: Потоковый бинарный JSON (с зжатием)
«
Ответ #9 :
Октябрь 20, 2013, 01:29 »
Цитата: Fregloin от Октябрь 19, 2013, 20:34
Тут еще такое дело, что данные нужно зашифровывать при передаче. Вот такое тз. раньше не заморачивались, гоняли тупо текст в локальной сети. теперь нужно шифровать, + сжимать так как данных будет намного больше чем раньше.
Ну на счёт шифрования дело такое…
Уточните ТЗ, кто требует шифрование и для чего.
Одно дело просто от снифа прикрыться - тут вариантов масса.
Другое дело если надо какой-то категории защиты информации соответствовать. Там уже из вариантов практически только ГОСТовское шифрование с ключами из удостоверяющего центра.
Записан
xokc
Птица говорун
Offline
Сообщений: 976
Re: Потоковый бинарный JSON (с зжатием)
«
Ответ #10 :
Октябрь 21, 2013, 10:52 »
Цитата: Fregloin от Октябрь 19, 2013, 20:34
теперь нужно шифровать, + сжимать так как данных будет намного больше чем раньше.
Сжимайте JSON ДО шифрования. Тогда данных больше чем раньше не будет. Ну и, конечно, с учетом предыдущего сообщения, шифрование бывает разным...
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...