2015-11-22 4 views
3

Я использую Pusher транслировать мою Laravel событие, однако я столкнулся сомнение:Как организовать Pusher JS Library на стороне клиента, чтобы связать несколько каналов и прослушать несколько событий?

Если у меня есть канал, давайте назовем его 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е зарегестрированным пользователям, но не уникальных пользователей, поскольку каждый из них может быть подписан на несколько каналов, даже если они не потребляют сообщения.

Что мне делать?

ответ

1

tl; dr: ваш подход звучит.

Клиент может подписаться на столько каналов, сколько им нравится - ограничений нет. Единственный раз, когда может произойти какое-либо серьезное подслушивание, будет при подписке на 100 каналов или подписаться на многие private channels, где каждая подписка приведет к authentication call (однако это может быть выгружено).

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

Я бы рекомендовал Building Real-Time Laravel Apps with Pusher (который я написал - я работаю для Pusher).