Добрый день!
Подскажите как реализовать: сервер асинхронно принимает данные от многих (50) клиентов (время и числовые данные) раз в секунду например.
Вопрос: где хранить данные и как в любой момент посмотреть данные от любого клиента?
Пока думаю так:
1) сделать subVI запустить ее 50 раз асинхронно и там в сдвиговом регистре хранить данные от клиентов.
2) сохранять в 50 файлов и оттуда если нужно подгружать.
Сбор и просмотр данных от многих клиентов
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Сбор и просмотр данных от многих клиентов
Зависит от объема хранимых данных, если Вы привысите допустимый объем ОЗУ, то программа зависнет.rushonda писал(а): ↑06 май 2021, 16:18 Добрый день!
Подскажите как реализовать: сервер асинхронно принимает данные от многих (50) клиентов (время и числовые данные) раз в секунду например.
Вопрос: где хранить данные и как в любой момент посмотреть данные от любого клиента?
Пока думаю так:
1) сделать subVI запустить ее 50 раз асинхронно и там в сдвиговом регистре хранить данные от клиентов.
2) сохранять в 50 файлов и оттуда если нужно подгружать.
Если подразумевается длительная работа, то лучше не хранить в памяти, а писать сразу в БД или TDMS, ну или отдельный файл на канал.
А уже от туда, дергать необходимые.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- professor
- Сообщения: 3403
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: Сбор и просмотр данных от многих клиентов
Как он их принимает? На каждого клиента своё соединение? Это обычная сеть Ethernet?
Возможно, и не придётся запускать 50 клонов.
В примерах есть TCP Multiple Connections.lvproj, там соединения хранятся в массиве и просто последовательно перебираются. Для скорости 1Гц вполне достаточно.
Как верно сказал Иван, зависит от объёмов и задачи. Если нужно иметь доступ асинхронный доступ к одному текущему значению, то проще кидать всё в глобальную переменную. тогда любое количество "клиентов" сможет в любой момент получить значение желаемого "канала".Вопрос: где хранить данные и как в любой момент посмотреть данные от любого клиента?
2) сохранять в 50 файлов и оттуда если нужно подгружать.
Если же нужна история, то тут снова варианты. Как вы планируете дёргать данные из сдвиговых регистров ваших клонов? Или тех же файлов?
-
- developer
- Сообщения: 289
- Зарегистрирован: 26 фев 2016, 06:31
- Версия LabVIEW: 18-20
- Благодарил (а): 6 раз
- Поблагодарили: 7 раз
- Контактная информация:
Re: Сбор и просмотр данных от многих клиентов
50-100 клиентов со скоростью 1Гц, именно через TCP Multiple Connections.lvproj - пока все в одном массиве крутится - т.е. массив каждый раз увеличивается. Данные соответственно из массива можно дергать. Данные только за день - хранить не обязательно. Данные, которые за секунду приходят: время, и еще пара числовых параметров.
Не сильно ли тут нагружается комп, как обычно такое организуется правильно?
И что будет, если частоту до 10 Гц увеличить?
p.s. Видимо пока можно обойтись без клонов.
Не сильно ли тут нагружается комп, как обычно такое организуется правильно?
И что будет, если частоту до 10 Гц увеличить?
p.s. Видимо пока можно обойтись без клонов.
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Сбор и просмотр данных от многих клиентов
Проведите форсированные испытания и посмотрите.
А так, арифметика простая
Каждая порция данных 2*DBL + TimeStamp = 2*8+16 = 32 Byte. Ecли время преобразовать в DBL, то 24 Byte.
От 100 клиентов в секунду (1Гц) 32000 Byte
Сутки 32*100*86400=276480000 Byte или примерно 264 MByte.
В этом случае, я думаю современный компьютер справится без проблем.
Если 10Гц, то это получится уже 2.6 GByte, это уже многовато.
Но тут вопрос в другом, готовы ли Вы потерять данные накопленные за 23.5 часа работы в результате сбоя OS или скачка электричества?
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- developer
- Сообщения: 289
- Зарегистрирован: 26 фев 2016, 06:31
- Версия LabVIEW: 18-20
- Благодарил (а): 6 раз
- Поблагодарили: 7 раз
- Контактная информация:
Re: Сбор и просмотр данных от многих клиентов
Желательно в файл конечно писать, но 100 файлов плодить как-то не вариант. Если бы данные шли синхронно, можно было бы в двумерный массив добавлять на каждой итерации строку и писать в один файл...Но тут вопрос в другом, готовы ли Вы потерять данные накопленные за 23.5 часа работы в результате сбоя OS или скачка электричества?
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Сбор и просмотр данных от многих клиентов
Записывайте данные в базу данных. Можно использовать SQLite даже. А если нужно их прочитать - то тоже без проблем. А держать в памяти, в массиве данные за сутки - это костыли. В памяти можно держать только лишь небольшой буффер данных (потому что, например, писать в базу/файл каждую секунду тоже так себе решение, нужно выгружать данные реже, напр., каждую минуту или больше).
Мы делили апельсин - много наших полегло...
-
- adviser
- Сообщения: 231
- Зарегистрирован: 06 ноя 2020, 15:37
- Версия LabVIEW: 19
- Благодарил (а): 18 раз
- Поблагодарили: 37 раз
- Контактная информация:
Re: Сбор и просмотр данных от многих клиентов
Время в каком формате с какой точностью. Если с точностью до секунды, время можно принять одно для всех клиентов.rushonda писал(а): ↑06 май 2021, 16:18 Добрый день!
Подскажите как реализовать: сервер асинхронно принимает данные от многих (50) клиентов (время и числовые данные) раз в секунду например.
Вопрос: где хранить данные и как в любой момент посмотреть данные от любого клиента?
Пока думаю так:
1) сделать subVI запустить ее 50 раз асинхронно и там в сдвиговом регистре хранить данные от клиентов.
2) сохранять в 50 файлов и оттуда если нужно подгружать.
Если выборка 100 мс и точность фиксации времени 100 мс также можно сделать одно время на всех.
Если будут разные времена на графике разные значения еще будет видно, а выборка и другие операции уже становятся проблематичными.
А в остальном как уже было сказано возможны любые варианты на Ваш выбор.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 3 Ответы
- 869 Просмотры
-
Последнее сообщение IvanLis
-
- 13 Ответы
- 1223 Просмотры
-
Последнее сообщение Boxa
-
- 0 Ответы
- 500 Просмотры
-
Последнее сообщение Juri
-
- 3 Ответы
- 272 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 13 Ответы
- 2451 Просмотры
-
Последнее сообщение rsv