Каждый раз, когда устанавливается новое соединение, мы создаем новую комнату.Так, например, когда пользователь устанавливает новое соединение, мы можем дать имя комнаты как users: user_id: some_unique_random_string, которое может быть равно users: user_id: 123j123b1h2b1j23bh12b3, и когда тот же пользователь устанавливает другое соединение, открыв другую вкладку, мы также сделаемто же самое и создать отдельную комнату.Теперь одна вещь, которую обеспечивает ActionCable, состоит в том, что мы можем найти все имя комнаты, за которым следует любой префикс.
Позволяет пользователю выполнить три подключения, и его комнаты являются пользователями: 128: 123n1jh123ko9876, пользователи: 128: asdas23412cs1234, пользователи: 128: asni9202h5i3jens, затем мы можем получить имя этой комнаты также с помощью ActionCable.
user_id = 128
pubsub = ActionCable.server.pubsub
channel_with_prefix = pubsub.send(:channel_with_prefix, RoomChannel.channel_name)
channels = pubsub.send(:redis_connection).pubsub('channels', "#{channel_with_prefix}:users:#{user_id}:*")
Теперь каналы - это массив, состоящий из имени комнаты.
Итак puts channels
["chatapp_production:users:128:123n1jh123ko9876", "chatapp_production:users:128:asdas23412cs1234", "users:128:asni9202h5i3jens"]
Так мы можем найти все комнаты, относящиеся к одному пользователю, безиспользуя любую внешнюю базу данных и вызовы API.