Как консолидировать данные нескольких отправителей через PubSub?

В канал PubSub несколько серверов публикуют свои локальные данные, которые надо консолидировать и сообщить агрегированный результат локальным клиентам, подключённым к каждому из серверов.

Для примера, голосование да два варианта: А и Б. Три сервера с1, с2, с3. По окончании времени голосования надо каждому из серверов показать своим клиентам общие данные голосования. Каждый сервер сначала "знает" только свои данные:
.   А   Б
с1  11  22
с2  3   4
с3  55  66


Как лучше решить эту задачу: какими сообщениями им обменяться, получив общий сигнал окончания сбора голосов?

Два варианта пока пришли в голову:
1. Костыльно через конфиги давать всем знать, сколько всего серверов участвует – скольких результатов ждать. И что-то типа (псевдокод) Promise.all([s1, s2, s3]).then(...) Каждый сервер в сообщении "представляется" – от кого данные.

2. Просто слушать сообщения с локальными результатами и каждый раз при получении обновлять свой локальный тотал. Если сообщения содержат "от кого" – это позволяет даже уточнять результаты повторными мессаджами. Перед отправкой своим локальным клиентам при получении тоталов выдерживать паузу в X ms, дебаунсить, чтобы при примерно одновременном поступлении сообщений не бомбить клиентов частым обновлением.

Может, ещё какой-то «правильный» вариант есть?
  • Вопрос задан
  • 37 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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