Есть роут который принимает айди юзера и в ответ отдает стрим с помощью которого будут стримится изменения для юзера. Мне нужно как то хранить все эти стримы. Думал в обьекте и ключем делать айдишку юзера, но юзер может подключится с какого нибудь другого устройства и оно перетрет первое соединение. Как быть?
Есть 5 кластеров с приложением и один для стримов. Для подписи на стрим юзается обычный http GET. При любом изменении модели на каком то из кластеров он оповещает сервер с стримами (дальше СС) о изменении, СС в свою очередь обрабатывает то что получает в соответствии со всеми подписями и стримит данные. Проблема в том, что один юзер может подписаться с нескольких машин и по его айдишке у меня будет массив соединений. Мне нужно добавить к ним какой то уникальный идентификатор что бы можно было без проблем распознать.
Coder321: Вы с TCP работаете? В node js для этого есть модуль net, там по событию "Event: 'connection' "возвращается сокет на конкретное соединение, дальше можно делать что хотите с ним. На него можно повесить обработчик события закрытия.
yurygolikov: да я сам уже запутался) в массиве должны быть все стримы конкретного юзера, как удалить с массива тот стрим, соединение которого было закрыто или оборвано?
Можно хранить в сокете ссылку на юзера, которому он принадлежит. И повесить коллбек на закрытие сокета - удалить из объекта данного юзера дескриптор.
Или к примеру хранить в WeakMap. А в открытом сокете держать ссылку на дескриптор этого сокета. Как только сокет закроется - объект удалится и дескриптор тоже автоматически удалится из WeakMap.
yurygolikov: хм, никогда не работал с WeakMap, оказывается довольно интерестная вещь. Как я понял инфа в WeakMap живет пока живет приввязаный к нему обьект?