Как организовать библиотеку Pusher JS на стороне клиента для привязки к нескольким каналам и прослушивания нескольких событий?

Я использую Pusher для трансляции событий Laravel, однако я сталкиваюсь с сомнением:

Если у меня есть канал, давайте назовем его global_updates который я хотел бы использовать для отправки глобальных обновлений, таких как новости или статус сайта, поэтому я просто делаю:

var pusher = new Pusher('#################', {
encrypted: true
});
var channel = pusher.subscribe('global_updates');
channel.bind('global_event', function(data) {
// stuff
});

Итак, пока здесь все идет хорошо, но что если я хотел бы использовать несколько событий для одного канала? Как мне это сделать? Я должен делать:

var pusher = new Pusher('#################', {
encrypted: true
});
var channel = pusher.subscribe('global_updates');
channel.bind('global_event', function(data) {
// stuff
});

channel.bind('global_event2', function(data) {
// stuff for other event
});

channel.bind('global_event3', function(data) {
// stuff for the 3rd event
});

Это хороший подход? Теперь, что если я хотел бы отправить сообщения peruser вместе с глобальным, скажем, есть канал для пользователя с именем user_(user_id) но я все еще хочу потреблять глобальные события. Должен ли я подписаться на оба одновременно?

var pusher = new Pusher('#################', {
encrypted: true
});
var channel = pusher.subscribe('global_updates');
var UserChannel = pusher.subscribe('user_(user_id)');

channel.bind('global_event', function(data) {
// stuff
});

UserChannel.bind('per_user_event', function(data) {
// stuff
});

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

Что я должен делать?

3

Решение

tl; dr: ваш подход обоснован.

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

С точки зрения «хорошей практики», я бы порекомендовал иметь один канал для глобальных событий, полученных всеми пользователями, и у каждого пользователя должен быть свой канал, по которому отправляются события, которые должны только быть принятым этим пользователем. В целях безопасности я бы рекомендовал, чтобы пользовательский канал был частным. Если вы используете Event Broadcasting в Laravel, вам необходимо реализовать конечную точку аутентификации, для чего потребуется настроить Pusher Laravel Bridge.

Я бы порекомендовал Создание приложений Laravel в реальном времени с помощью Pusher (который я написал — я работаю на Pusher).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]