@GerasimGerasimov

Websocket асинхронные запросы клиентов к одной async функции сервера как организовать?

пишу систему сбора данных, использую WebSoket на Node.JS.

Клиенты обращаются к серверу, сервер в свою очередь, запрашивает с помощью асинхронной функции данные от "железки" (т.е. надо подождать пока ответит "железка").

Данные запрашиваются клиентом с максимально возможной частотой (около 300 раз в сек), как только сервер ответил, сразу отправляется новый запрос.

Пока клиент один - всё отлично. Когда добавляется второй клиент, то, так как обращаются к одой и той же асинхронной функции, начинаю друг другу мешать, порой на несколько секунд подвешивая связь.

Как правильно спроектировать приложение сервера в такой ситуации? Напрашивается создание очереди доступа к асинхронной функции с ожиданием ответа на запрос к данной функции от конкретного сокета. Наверняка кто-то сталкивался с подобным поведением (например асинхронная функция - запрос с длительным обращением к БД) и как-то побеждал проблему.

Я менял эту функцию на синхронную (выдаёт некий похожий на реальный JSON) - тогда все сервер работает без сбоев.

Cокеты вызывают одну и туже async функцию, передавая ей различные (ведь у каждого сокета свой запрос) параметры. Функция возвращает Promice... но это же не выстраивает автоматически очередь вызовов данной функции с разными параметрами, результат работы которой должен вернуться вызвавшему её сокету?
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 1
Вам стоит разделить запрос от клиент к серверу и запрос от сервера к "железке".
Получится так - сервер отдельным процессом поддерживает актуальность данных с "железки" сохраняя, к примеру, сами данные и время их получения.
Клиент делает запрос к серверу и получает от него последние актуальные данные с объекта.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы