как реализовать обновление виджетов в реальном времени?
Всем привет, у меня возник вопрос о том, как правильно реализовать обновление виджетов в "реальном времени". Как это работает сейчас: есть функции с манипуляциями виджетов ( создать, обновить,... получить и тд). С фронта мне приходят подобные модели
{
"_id": {
"$oid": "6613b0b7133b682c829b3f9b"
},
"title": {
"value": "Давление",
"brokerPath": null
},
"folderId": null,
"icon": "http://local.bluetraktor.api:8000/api/icons/03.07 Индикаторы давления.svg",
"data": {
"value": {
"value": "-0.0008793864399194717",
"brokerPath": [
"ASSETS_DB",
"PV Value",
"value"
]
},
"minValue": {
"value": "0",
"brokerPath": [
"ASSETS_DB",
"Нижний диапазон PV",
"value"
]
},
"maxValue": {
"value": "19.999998092651367",
"brokerPath": [
"ASSETS_DB",
"Верхний диапазон PV",
"value"
]
},
"colorRules": [],
"valueAddition": {
"value": "bar",
"brokerPath": [
"ASSETS_DB",
"PV Units",
"value"
]
}
},
"type": "gauge",
"position": {
"i": "6613b0b7133b682c829b3f9b",
"x": {
"$numberLong": "0"
},
"y": {
"$numberLong": "0"
},
"w": {
"$numberLong": "1"
},
"h": {
"$numberLong": "2"
}
}
}
_id - добавляет сама mongoDB в position.i тот же самый objId но уже в строке и это поле (position) нужно сугубо для позиционирования виджета на экране..
Поля возможные для заполнения пользователем выглядят так
{
"value": "Давление",
"brokerPath": null
}
где если brokerPath - не содержит пути для получения параметра - то значит, что value вписал сам пользователь и обновлять его не надо. В остальных случаях если
{
"value": "0",
"brokerPath": [
"ASSETS_DB",
"Нижний диапазон PV",
"value"
]
}
такого вида, то понятно откуда брать значение...
Для обновления в реальном времени открыт сокет и я туда при обновлении хотя бы одного значения в бд ( по какой либо из ссылок внутри этой модели) отправляю id виджета и его перезапрашивают для обновления ( через функцию на получение ) и сам туда подставляю новые значения, рекурсивно проходясь по структуре в поиске ( тк виджетов виджетов много и они все разные) ищя места для вставляения.
сейчас это работает очень медленно ( в среднем за счет скорости раста около 85,6...ms ). понимаю, что если будет много пользователей, это будет работать еще в разы хуже -> как правильно это реализовать?
виджет таблицы (12 значений по ссылкам) создается у меня от 1-2 секунд.. это как пример