Каналы FeathersJS - отличный способ обрабатывать данные в реальном времени. Однако иногда вам могут понадобиться только определенные данные на определенной странице. Например, у вас может быть приложение для чата с несколькими комнатами, и вы хотите предоставить данные только для той комнаты, которую просматривает пользователь.

На сервере

Чтобы иметь возможность обрабатывать каналы на лету, я собираюсь настроить специальный сервис, который будет обрабатывать присоединение к каналам и выход из них.

В приведенном выше фрагменте пользовательского класса обслуживания мы используем метод create для присоединения к каналу и метод remove, чтобы покинуть канал.

Услуга

Теперь, чтобы настроить службу для отправки данных в каналы, в файле *-service.js мы можем настроить пользовательскую публикацию. Это приведет к передаче данных только по существующим каналам и отфильтровывает текущего пользователя. Таким образом, пользователь, создавший сообщение в комнате, не получит .on('created')event при создании нового сообщения, но все остальные подписанные пользователи получат это.

Потрясающие! Теперь мы отправляем данные только тем, кто этого хочет. Теперь давайте посмотрим на настройку клиента.

Клиент

Для нашего обсуждения здесь я просто покажу краткий пример того, где вы должны генерировать события подписки / отмены подписки.

Приведенный выше пример относится к компоненту CanJS. Мы используем connectedCallback, который представляет собой ловушку жизненного цикла, вызываемую после того, как элемент компонента вставлен в документ. Это также может вернуть функцию, которая будет использоваться, когда компонент будет разорван / удален из документа.

Внутри connectedCallback мы можем испустить событие subscribe, а при разборке мы можем испустить unsubscribe. Когда пользователь переходит к этому компоненту, он автоматически подписывает текущего пользователя на комнату, поэтому все сообщения, созданные с помощью этого roomId, будут отправляться в этот канал комнаты.

Чтобы увидеть, как это повлияет на ваше приложение, если вы откроете вкладку сети в devtools и выберете вложенную вкладку ws, вы увидите в разделе фреймов все данные, передаваемые на ваш сервер и с него.

Если сервер был настроен для публикации в authenticated канале, все пользователи, вошедшие в систему. Каждый пользователь будет видеть созданные события для сообщений и комнат, которые он не просматривает. Это означает, что сервер отправляет данные тем, кто его не использует или не требует, поэтому мы можем предотвратить это, отправляя данные только тем, кто подписан на определенный канал.

Спасибо за прочтение.

Если вы заметили что-то неправильное или что-то можно улучшить, прокомментируйте ниже. Я ценю все конструктивные отзывы.