В канал PubSub несколько серверов публикуют свои локальные данные, которые надо консолидировать и сообщить агрегированный результат локальным клиентам, подключённым к каждому из серверов.
Для примера, голосование да два варианта: А и Б. Три сервера с1, с2, с3. По окончании времени голосования надо каждому из серверов показать своим клиентам общие данные голосования. Каждый сервер сначала "знает" только свои данные:
. А Б
с1 11 22
с2 3 4
с3 55 66
Как лучше решить эту задачу: какими сообщениями им обменяться, получив общий сигнал окончания сбора голосов?
Два варианта пока пришли в голову:
1. Костыльно через конфиги давать всем знать, сколько всего серверов участвует – скольких результатов ждать. И что-то типа (псевдокод)
Promise.all([s1, s2, s3]).then(...)
Каждый сервер в сообщении "представляется" – от кого данные.
2. Просто слушать сообщения с локальными результатами и каждый раз при получении обновлять свой локальный тотал. Если сообщения содержат "от кого" – это позволяет даже уточнять результаты повторными мессаджами. Перед отправкой своим локальным клиентам при получении тоталов выдерживать паузу в X ms, дебаунсить, чтобы при примерно одновременном поступлении сообщений не бомбить клиентов частым обновлением.
Может, ещё какой-то «правильный» вариант есть?