Russian Qt Forum
Ноябрь 22, 2024, 22:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как лучше реализовать обновление состояний объектов?  (Прочитано 2856 раз)
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« : Декабрь 26, 2013, 18:25 »

Постараюсь объяснить доступно и кратко.
Есть клиент и сервер. Формат общения тесктовый json (пока). Есть объект, у которого есть различные свойства (определены через Q_PROPERTY). Сервер передает клиенту состояния этих объектов (объектов много, их несколько разных типов). Под состоянием я понимаю набор текущих значений этих свойств. После получения json парсится, далее я прохожу по разобранному json, на основании полученных id объектов нахожу их, и дальше найденному объекту скармливаю json узел, который содержит дагнные о его свойствах. На основании полученного состояния происходит отрисовка элемента на сцене должным образом. Но что то мне подсказывает, что такой механизм далек от идеала. Вот и думаю, как сделать по уму, что бы данные с серва парсились в отдельном потоке, а отрисовка была в осном потоке + синхронизация по потокам была толковая.
Сейчас как, иду по json дереву, нашёл id объекта, достал его из хеша, и передаю этот узел парситься внутрь объекта (виртуальная функция). Объект узнает, изменилось ли состояние или нет (на основании сравнения с предыдущим), если изменился - то дает соотвествующий сигнал. В другом объекте на этот сигнал заведен слот, и при его вызове опррашиваются свойства (Q_PROPERTY) этого объекта и задаются нужные цвета и атрибуты связанному элементу сцены. Т.е. по сути парсинг и отрисовка идет в реальном времени. На небольших количествах объектов это работает достаточно быстро. Но вот будет объект, на котором будет задействовано 8 мониторов1920*1080, и на них будет запущена одна программа, которая будет рисовать довольно много графики на сцене. Закрадываются сомнения по поводу того, как будет работать текущая модель.
Как мысль, завести два массива объектов-состояний, один в котором будут парситься после приема данных, а во второй будут копироваться первые после изменений.
Вобщем я пока запутался.
Записан
Bepec
Гость
« Ответ #1 : Декабрь 26, 2013, 19:03 »

Ну во 1 протестить на количестве объектов. (хотя если Graphics View должно потянуть, хотя хз. У меня сток мониторов нет)

Во 2 отказаться от текстового формата в бинарный формат.  Это снизит нагрузку на сеть и операции с бинарным форматом быстрее в разы. И парсить каждый раз строки - это пипец Улыбающийся Сам недавно так лопушнулся с оптоволокном. Со строками тормозило, с бинарным полетело.

В 3 подумать о модели, продумать архитектуру. Возможно вам ничего и не стоит менять. А мб стоит всё переделать Веселый

PS а тестировать то есть на чём?




Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #2 : Декабрь 26, 2013, 19:25 »

Текст понимаю что гемор, но есть 2 других программиста, которые пишут серваки для моих клиентов, и пока они особо не жаждут переходить на бинарный протокол. при том, уже был печальный опыт, когда не было никакой расширяемости протокола. есть реализация binaryJSON, процентов на 30-40 иногда больше объем данных получается меньше ну и парсинг быстрее.
но опять же, те программисты говорят, вот для отладки давай будем в тексте передавать, так и осталось. и это при условии, что данные идут пакетами (в несколько десятков а то и сотен кб) до 4 раз в секунду...
Записан
Bepec
Гость
« Ответ #3 : Декабрь 26, 2013, 19:34 »

Я тоже могу рассказать столько интересных историй Улыбающийся
Аля высоконагруженное приложение, работающее по трём гигабитным интерфейсам, пищущее о каждом принятом и отправленном пакете в текстовый файл Веселый Объём лога превыщает объем данных через первые пять секунд запуска  до печального конца свободного места на жёстком диске через 10 минут. И каждые 10 минут его перезапускал ватчер Веселый

Сейчас решать вам. Я бы предложил просто - взять целевой комп и запустить там тестовую версию программы. И посмотреть - ляжет или нет.
А потом выяснить почему лёг. А потом посмотреть справляется ли он с данными Веселый

PS в общем тут больше посоветовать не могу, ибо нужно знать объёмы, мощности, цели наконец ^.^
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #4 : Декабрь 29, 2013, 10:53 »

Постараюсь нарисовать толковую слоксхему потоков данных в программе и краткую ее структуру на днях. может действительно оставить все как етсь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 22.