Контекст: я могу отправлять команды в систему, которая может ответить сообщением ok
или error
(сообщения отправляются по UDP).Пока ответ не отправлен, он не может принять любую другую команду.Мы должны ждать ответа для отправки следующих команд, но мы хотим, чтобы все запущенные команды отправлялись в эту систему.Как и обратное давление без потерь для синхронизации следующих команд с ответами.
Здесь приведена мраморная диаграмма, поясняющая этот процесс :
commands$
- это наблюдаемая команда, которая должна быть отправлена в систему.Наблюдаемый responses$
- это место, где мы можем подписаться на ответы из системы.
Как показано, первой команде не требуется отправлять ответ раньше, и это может быть достигнуто с помощью merge()
.
Оператор throttle()
близок к тому, что мне нужно, но команды, отправленные без получения ответа, теряются.Если при получении какого-либо ответа предоставляются две команды, первая команда должна быть отправлена после этого ответа, а вторая - после ответа, как показано c4
и c5
.Команда c4
отправляется сразу после ответа r3
и c5
после ответа r4
.
Это немного похоже на вопрос , но в этом случае ответы не связано с запросами, подобными запросам от клиента HTTP, из-за вышеупомянутого использования UDP,
Есть идеи, как этого добиться?
Примечание: Из-за характераUDP, если ответ не получен, любая следующая команда никогда не будет отправлена.Это может быть решено различными стратегиями, но не обязательно в рамках этого вопроса.