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

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

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

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

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

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

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


Ответы (1 шт):

Автор решения: vihtor

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

→ Ссылка