Как лучше хранить массив пользователей онлайн на golang?

Как лучше хранить массив пользователей онлайн?
Пользователи подключаются по websocket.
Есть слайсы со следующими структурами

Users {Id,Name .....}
SocketsOnline{Id, *webSocketType, (UserId)}
UsersOnline{UserId,map [SocketId]}
Rooms{Id,NameRoom}
SocketsInRoom{RoomId,SocketId} //или UserId вместо сокета

когда подключается пользователь- создаётся соккет и заносится в слайс из типа SocketsOnline.
Если нужно разослать сообщение всем- я перебираю весь слайс и отсылаю сообщение всем.
Но я хочу параллельно хранить указатели на сокеты у каждого пользователя типа UsersOnline.
Тоесть когда подключился сокет 1- я знаю, что это пользователь id333 -я создаю объект в слайсе типа UsersOnline и хочу кинуть ссылку на сокет 1.
Если подкл сокет 2, пользователь id333 - я добавляю ещё.
Если пользователь отключился- я удаляю сокет из SocketsOnline и всё норм.
Поидее- если создать указатели на сокеты у пользователя, то при удалении из SocketsOnline он должен исчезнуть в UsersOnline.
Но если отключается сокет, то сам UserOnline не удалится. (Как это подчищать?)
Вопрос собственно- как это реализовать? или,может,-нужна другая логика?
  • Вопрос задан
  • 327 просмотров
Пригласить эксперта
Ответы на вопрос 1
При отключении сокета пройтись проверить наличие других сокетов от совпадающего UserId, если таких нет - убрать пользователя из UsersOnline. Технически - defer проверочной функции/метода после успешной авторизации пользователя, когда заносится ссылка на него в слайс UsersOnline
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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