Russian Qt Forum
Ноябрь 22, 2024, 22:37
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Общий
>
Как лучше реализовать обновление состояний объектов?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как лучше реализовать обновление состояний объектов? (Прочитано 2856 раз)
Fregloin
Супер
Offline
Сообщений: 1025
Как лучше реализовать обновление состояний объектов?
«
:
Декабрь 26, 2013, 18:25 »
Постараюсь объяснить доступно и кратко.
Есть клиент и сервер. Формат общения тесктовый json (пока). Есть объект, у которого есть различные свойства (определены через Q_PROPERTY). Сервер передает клиенту состояния этих объектов (объектов много, их несколько разных типов). Под состоянием я понимаю набор текущих значений этих свойств. После получения json парсится, далее я прохожу по разобранному json, на основании полученных id объектов нахожу их, и дальше найденному объекту скармливаю json узел, который содержит дагнные о его свойствах. На основании полученного состояния происходит отрисовка элемента на сцене должным образом. Но что то мне подсказывает, что такой механизм далек от идеала. Вот и думаю, как сделать по уму, что бы данные с серва парсились в отдельном потоке, а отрисовка была в осном потоке + синхронизация по потокам была толковая.
Сейчас как, иду по json дереву, нашёл id объекта, достал его из хеша, и передаю этот узел парситься внутрь объекта (виртуальная функция). Объект узнает, изменилось ли состояние или нет (на основании сравнения с предыдущим), если изменился - то дает соотвествующий сигнал. В другом объекте на этот сигнал заведен слот, и при его вызове опррашиваются свойства (Q_PROPERTY) этого объекта и задаются нужные цвета и атрибуты связанному элементу сцены. Т.е. по сути парсинг и отрисовка идет в реальном времени. На небольших количествах объектов это работает достаточно быстро. Но вот будет объект, на котором будет задействовано 8 мониторов1920*1080, и на них будет запущена одна программа, которая будет рисовать довольно много графики на сцене. Закрадываются сомнения по поводу того, как будет работать текущая модель.
Как мысль, завести два массива объектов-состояний, один в котором будут парситься после приема данных, а во второй будут копироваться первые после изменений.
Вобщем я пока запутался.
Записан
Bepec
Гость
Re: Как лучше реализовать обновление состояний объектов?
«
Ответ #1 :
Декабрь 26, 2013, 19:03 »
Ну во 1 протестить на количестве объектов. (хотя если Graphics View должно потянуть, хотя хз. У меня сток мониторов нет)
Во 2 отказаться от текстового формата в бинарный формат. Это снизит нагрузку на сеть и операции с бинарным форматом быстрее в разы. И парсить каждый раз строки - это пипец
Сам недавно так лопушнулся с оптоволокном. Со строками тормозило, с бинарным полетело.
В 3 подумать о модели, продумать архитектуру. Возможно вам ничего и не стоит менять. А мб стоит всё переделать
PS а тестировать то есть на чём?
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: Как лучше реализовать обновление состояний объектов?
«
Ответ #2 :
Декабрь 26, 2013, 19:25 »
Текст понимаю что гемор, но есть 2 других программиста, которые пишут серваки для моих клиентов, и пока они особо не жаждут переходить на бинарный протокол. при том, уже был печальный опыт, когда не было никакой расширяемости протокола. есть реализация binaryJSON, процентов на 30-40 иногда больше объем данных получается меньше ну и парсинг быстрее.
но опять же, те программисты говорят, вот для отладки давай будем в тексте передавать, так и осталось. и это при условии, что данные идут пакетами (в несколько десятков а то и сотен кб) до 4 раз в секунду...
Записан
Bepec
Гость
Re: Как лучше реализовать обновление состояний объектов?
«
Ответ #3 :
Декабрь 26, 2013, 19:34 »
Я тоже могу рассказать столько интересных историй
Аля высоконагруженное приложение, работающее по трём гигабитным интерфейсам, пищущее о каждом принятом и отправленном пакете в текстовый файл
Объём лога превыщает объем данных через первые пять секунд запуска до печального конца свободного места на жёстком диске через 10 минут. И каждые 10 минут его перезапускал ватчер
Сейчас решать вам. Я бы предложил просто - взять целевой комп и запустить там тестовую версию программы. И посмотреть - ляжет или нет.
А потом выяснить почему лёг. А потом посмотреть справляется ли он с данными
PS в общем тут больше посоветовать не могу, ибо нужно знать объёмы, мощности, цели наконец ^.^
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: Как лучше реализовать обновление состояний объектов?
«
Ответ #4 :
Декабрь 29, 2013, 10:53 »
Постараюсь нарисовать толковую слоксхему потоков данных в программе и краткую ее структуру на днях. может действительно оставить все как етсь.
Записан
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...