Могу ли я добавить назначения в «основной сокет» после того, как соединение уже установлено? - PullRequest
0 голосов
/ 31 декабря 2018

Как объясняется в этом посте , когда клиент впервые подключается к серверу, создается «главный сокет / процесс» и хранятся его назначения.Позже, когда клиент присоединяется к определенным каналам / темам, сокет / процесс каждого канала копирует эти назначения и может добавлять к ним, как будет.

Теперь у меня есть случай использования, когда пользователь присоединяется к своему индивидуальному каналу(i.e. user:#{user_id}), я получаю некоторую информацию о пользователе из БД, которая затем должна быть доступна для всех каналов, к которым позже присоединится этот пользователь.Однако я не смог найти способ поместить эту информацию в socket.assigns, чтобы она была доступна везде.Если я попытаюсь назначить их, они будут доступны только на socket.assigns этого конкретного user:#{user_id} канала.

Есть ли способ сделать это?Должен ли я просто вместо этого просто попытаться получить всю эту информацию за один раз при первом подключении пользователя, а не при подключении к отдельному каналу пользователя?

1 Ответ

0 голосов
/ 31 декабря 2018

Разные каналы означают разные сокеты.

Самое простое решение - сохранить постоянное состояние (Agent, ETS, DETS, mnesia, ...), держа картуuser_id => user_info и запрашивайте это состояние всякий раз, когда вам нужна эта информация.

...