Я столкнулся с архитектурной проблемой, которую пока не могу найти подходящего решения. У меня есть Linux коробка, которая является просто машиной, подключенной к сети с помощью кабеля Ethe rnet, работающей Linux. Это значения выборки из AD C (аналого-цифровой преобразователь) на уровне 3000 samples/sec
. На каждом сэмпле он на самом деле сэмплирует все 8 каналов AD C. Итак, у меня есть 3000 * 8 значений типа DOUBLE каждую секунду.
Моя проблема заключается в следующем: потоковая передача этих данных в режиме реального времени клиенту, работающему с веб-приложением, и представление его там с некоторыми Javascript рамки. Программа в поле Linux должна быть в C. Я стараюсь избегать взаимодействия, подобного тому, которое доступно с. NET Core, чтобы избежать сложности.
Что я уже сделал?
Я реализовал веб-сервер в C, работающем как дочерний процесс вместе с родительским процессом, который выполняет выборку AD C значения. (на самом деле родителю не нужно пробовать, я сделал это как демонстрацию, прежде чем включить его в эту программу). Сервер может обслуживать запрос GET
, на который ему известно только то, что он отвечает только отформатированными JSON значениями всех 8 каналов, как на скриншоте ниже. Вот запрос, который я делаю с моего компьютера:
Обратите внимание, что я хочу, чтобы это работало только в локальной сети.
Теперь я думаю, что у меня может быть какая-то JS инфраструктура, которая получает данные из этого Linux ящика, непрерывно вызывая 192.168.1.95:8080
в запросе Ajax GET
и создавая график для всех 8 каналов одновременно. Это жизнеспособно? Насколько плох этот дизайн? Может ли это взломать sh браузер? Обратите внимание, что каждый запрос, такой как на скриншоте, принимает ~260 bytes
в качестве отправки, а ответ (JSON) - ~130 bytes
(около 50% обмениваемых данных - это заголовки HTTP).
То, как я себя чувствую в том, что если я продолжу в том же духе, то буду тратить 99% данных, которые ящики Linux, получая только в очень небольшом объеме, в клиентском веб-приложении. Обратите внимание, что я еще не сделал веб-приложение. Итак, я не знаю, как это на самом деле работает. Хотя могу вам сказать, что сервер на коробке Linux довольно быстрый. Кроме того, он работает только локально.
Гораздо лучшим решением было бы, если бы я мог работать с сокетом в браузере. Тогда это будет намного быстрее (я думаю).
Можете ли вы предложить лучший способ сделать это? Я бы также принял решение, которое можно использовать и за пределами локальной сети. Я ищу масштабируемое решение. Для клиентского приложения я намерен использовать ASP. NET Core.
Думаю, я подумал: веб-сокеты (используется библиотека для C?)? Будет ли это быстрее?
Все, что вы можете дать мне, будет высоко оценено.
С точки зрения кода, вот код:
https://github.com/giorgi3092/ECG_HW_SW_DE1_SoC/blob/master/adc_example/web_server/web_server2.c